Browse Source

[4114] Adjusted OPC mapping

pull/11516/head
mpetrov 2 years ago
parent
commit
5329fe3aa1
  1. 9
      ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-widget.models.ts
  2. 70
      ui-ngx/src/app/modules/home/components/widget/lib/gateway/utils/opc-version-mapping.util.ts

9
ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-widget.models.ts

@ -265,9 +265,9 @@ export interface WorkersConfig {
export interface ConnectorDeviceInfo { export interface ConnectorDeviceInfo {
deviceNameExpression: string; deviceNameExpression: string;
deviceNameExpressionSource: SourceType; deviceNameExpressionSource: SourceType | OPCUaSourceType;
deviceProfileExpression: string; deviceProfileExpression: string;
deviceProfileExpressionSource: SourceType; deviceProfileExpressionSource: SourceType | OPCUaSourceType;
} }
export interface Attribute { export interface Attribute {
@ -292,7 +292,7 @@ export interface LegacyTimeseries {
path: string; path: string;
} }
interface RpcArgument { export interface RpcArgument {
type: string; type: string;
value: number; value: number;
} }
@ -363,7 +363,7 @@ export type ConverterMappingFormValue = Omit<ConverterConnectorMapping, 'convert
export interface DeviceConnectorMapping { export interface DeviceConnectorMapping {
deviceNodePattern: string; deviceNodePattern: string;
deviceNodeSource: SourceType; deviceNodeSource: OPCUaSourceType;
deviceInfo: ConnectorDeviceInfo; deviceInfo: ConnectorDeviceInfo;
attributes?: Attribute[]; attributes?: Attribute[];
timeseries?: Timeseries[]; timeseries?: Timeseries[];
@ -373,6 +373,7 @@ export interface DeviceConnectorMapping {
export interface LegacyDeviceConnectorMapping { export interface LegacyDeviceConnectorMapping {
deviceNamePattern: string; deviceNamePattern: string;
deviceNodePattern: string;
deviceTypePattern: string; deviceTypePattern: string;
attributes?: LegacyAttribute[]; attributes?: LegacyAttribute[];
timeseries?: LegacyTimeseries[]; timeseries?: LegacyTimeseries[];

70
ui-ngx/src/app/modules/home/components/widget/lib/gateway/utils/opc-version-mapping.util.ts

@ -15,11 +15,21 @@
/// ///
import { import {
Attribute,
AttributesUpdate,
DeviceConnectorMapping, DeviceConnectorMapping,
LegacyAttribute,
LegacyDeviceAttributeUpdate,
LegacyDeviceConnectorMapping, LegacyDeviceConnectorMapping,
LegacyRpcMethod,
LegacyServerConfig, LegacyServerConfig,
LegacyTimeseries,
OPCBasicConfig_v3_5_2, OPCBasicConfig_v3_5_2,
ServerConfig OPCUaSourceType,
RpcArgument,
RpcMethod,
ServerConfig,
Timeseries
} from '@home/components/widget/lib/gateway/gateway-widget.models'; } from '@home/components/widget/lib/gateway/gateway-widget.models';
export class OpcVersionMappingUtil { export class OpcVersionMappingUtil {
@ -42,64 +52,74 @@ export class OpcVersionMappingUtil {
} }
static mapMappingToUpgradedVersion(mapping: LegacyDeviceConnectorMapping[]): DeviceConnectorMapping[] { static mapMappingToUpgradedVersion(mapping: LegacyDeviceConnectorMapping[]): DeviceConnectorMapping[] {
return mapping?.map((oldMapping: any) => ({ return mapping.map((legacyMapping: LegacyDeviceConnectorMapping) => ({
...oldMapping, ...legacyMapping,
deviceNodeSource: 'path', deviceNodeSource: this.getTypeSourceByValue(legacyMapping.deviceNodePattern),
deviceInfo: { deviceInfo: {
deviceNameExpression: oldMapping.deviceNamePattern, deviceNameExpression: legacyMapping.deviceNamePattern,
deviceNameExpressionSource: 'path', deviceNameExpressionSource: this.getTypeSourceByValue(legacyMapping.deviceNamePattern),
deviceProfileExpression: oldMapping.deviceTypePattern ?? 'default', deviceProfileExpression: legacyMapping.deviceTypePattern ?? 'default',
deviceProfileExpressionSource: 'path', deviceProfileExpressionSource: this.getTypeSourceByValue(legacyMapping.deviceTypePattern ?? 'default'),
}, },
attributes: oldMapping.attributes.map(attribute => ({ attributes: legacyMapping.attributes.map((attribute: LegacyAttribute) => ({
key: attribute.key, key: attribute.key,
type: 'path', type: this.getTypeSourceByValue(attribute.path),
value: attribute.path, value: attribute.path,
})), })),
attributes_updates: oldMapping.attributes_updates.map(attributeUpdate => ({ attributes_updates: legacyMapping.attributes_updates.map((attributeUpdate: LegacyDeviceAttributeUpdate) => ({
key: attributeUpdate.attributeOnThingsBoard, key: attributeUpdate.attributeOnThingsBoard,
type: 'path', type: this.getTypeSourceByValue(attributeUpdate.attributeOnDevice),
value: attributeUpdate.attributeOnDevice, value: attributeUpdate.attributeOnDevice,
})), })),
timeseries: oldMapping.timeseries.map(timeseries => ({ timeseries: legacyMapping.timeseries.map((timeseries: LegacyTimeseries) => ({
key: timeseries.key, key: timeseries.key,
type: 'path', type: this.getTypeSourceByValue(timeseries.path),
value: timeseries.path, value: timeseries.path,
})), })),
rpc_methods: oldMapping.rpc_methods.map(rpcMethod => ({ rpc_methods: legacyMapping.rpc_methods.map((rpcMethod: LegacyRpcMethod) => ({
method: rpcMethod.method, method: rpcMethod.method,
arguments: rpcMethod.arguments.map(arg => ({ arguments: rpcMethod.arguments.map(arg => ({
value: arg, value: arg,
type: this.getArgumentType(arg), type: this.getArgumentType(arg),
})) } as RpcArgument))
})) }))
})); }));
} }
static mapMappingToDowngradedVersion(mapping: DeviceConnectorMapping[]): LegacyDeviceConnectorMapping[] { static mapMappingToDowngradedVersion(mapping: DeviceConnectorMapping[]): LegacyDeviceConnectorMapping[] {
return mapping?.map((newMapping: DeviceConnectorMapping) => ({ return mapping.map((upgradedMapping: DeviceConnectorMapping) => ({
...newMapping, ...upgradedMapping,
deviceNamePattern: newMapping.deviceInfo.deviceNameExpression, deviceNamePattern: upgradedMapping.deviceInfo.deviceNameExpression,
deviceTypePattern: newMapping.deviceInfo.deviceProfileExpression, deviceTypePattern: upgradedMapping.deviceInfo.deviceProfileExpression,
attributes: newMapping.attributes.map((attribute: any) => ({ attributes: upgradedMapping.attributes.map((attribute: Attribute) => ({
key: attribute.key, key: attribute.key,
path: attribute.value, path: attribute.value,
})), })),
attributes_updates: newMapping.attributes_updates.map((attributeUpdate: any) => ({ attributes_updates: upgradedMapping.attributes_updates.map((attributeUpdate: AttributesUpdate) => ({
attributeOnThingsBoard: attributeUpdate.key, attributeOnThingsBoard: attributeUpdate.key,
attributeOnDevice: attributeUpdate.value, attributeOnDevice: attributeUpdate.value,
})), })),
timeseries: newMapping.timeseries.map((timeseries: any) => ({ timeseries: upgradedMapping.timeseries.map((timeseries: Timeseries) => ({
key: timeseries.key, key: timeseries.key,
path: timeseries.value, path: timeseries.value,
})), })),
rpc_methods: newMapping.rpc_methods.map((rpcMethod: any) => ({ rpc_methods: upgradedMapping.rpc_methods.map((rpcMethod: RpcMethod) => ({
method: rpcMethod.method, method: rpcMethod.method,
arguments: rpcMethod.arguments.map((arg: any) => arg.value) arguments: rpcMethod.arguments.map((arg: RpcArgument) => arg.value)
})) }))
})); }));
} }
private static getTypeSourceByValue(value: string): OPCUaSourceType {
if (value.includes('${')) {
return OPCUaSourceType.IDENTIFIER;
}
if (value.includes(`/`) || value.includes('\\')) {
return OPCUaSourceType.PATH;
}
return OPCUaSourceType.CONST;
}
private static getArgumentType(arg: unknown): string { private static getArgumentType(arg: unknown): string {
switch (typeof arg) { switch (typeof arg) {
case 'boolean': case 'boolean':

Loading…
Cancel
Save