mirror of
https://github.com/open62541/open62541.git
synced 2026-10-17 04:42:09 +08:00
605 lines
18 KiB
JSON
605 lines
18 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"$id": "https://open62541.org/schemas/server-config.json",
|
|
"title": "OPC UA Server Configuration",
|
|
"description": "JSON schema for open62541 server configuration",
|
|
"type": "object",
|
|
"properties": {
|
|
"buildInfo": {
|
|
"$ref": "#/definitions/BuildInfo",
|
|
"description": "Server build information"
|
|
},
|
|
"applicationDescription": {
|
|
"$ref": "#/definitions/ApplicationDescription",
|
|
"description": "Server application description"
|
|
},
|
|
"shutdownDelay": {
|
|
"type": "number",
|
|
"description": "Delay before server shutdown in seconds",
|
|
"minimum": 0
|
|
},
|
|
"verifyRequestTimestamp": {
|
|
"$ref": "#/definitions/RuleHandling",
|
|
"description": "Rule for verifying request timestamps"
|
|
},
|
|
"allowEmptyVariables": {
|
|
"$ref": "#/definitions/RuleHandling",
|
|
"description": "Rule for allowing empty variables"
|
|
},
|
|
"allowUnattachedMethods": {
|
|
"$ref": "#/definitions/RuleHandling",
|
|
"description": "Rule for allowing Methods without a parent"
|
|
},
|
|
"serverUrls": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "List of opc.tcp, opc.ws, opc.wss, opc.http and opc.https server URLs"
|
|
},
|
|
"tcpEnabled": {
|
|
"type": "boolean",
|
|
"description": "Enable TCP transport",
|
|
"default": true
|
|
},
|
|
"tcp": {
|
|
"$ref": "#/definitions/TcpConfiguration",
|
|
"description": "TCP configuration"
|
|
},
|
|
"webSocketEnabled": {
|
|
"type": "boolean",
|
|
"description": "Enable OPC UA Binary over WebSockets",
|
|
"default": false
|
|
},
|
|
"webSocket": {
|
|
"$ref": "#/definitions/WebSocketConfiguration",
|
|
"description": "WebSocket transport configuration"
|
|
},
|
|
"httpEnabled": {
|
|
"type": "boolean",
|
|
"description": "Enable OPC UA services over HTTP(S)",
|
|
"default": false
|
|
},
|
|
"httpAllowUnencrypted": {
|
|
"type": "boolean",
|
|
"description": "Explicitly allow the non-standard unencrypted opc.http scheme for testing. Passwords remain protected unless allowNonePolicyPassword is also enabled",
|
|
"default": false
|
|
},
|
|
"http": {
|
|
"$ref": "#/definitions/HttpConfiguration",
|
|
"description": "HTTPS transport configuration"
|
|
},
|
|
"securityPolicyNoneDiscoveryOnly": {
|
|
"type": "boolean",
|
|
"description": "Allow SecurityPolicy None only for discovery",
|
|
"default": false
|
|
},
|
|
"modellingRulesOnInstances": {
|
|
"type": "boolean",
|
|
"description": "Add modelling rules on instances",
|
|
"default": false
|
|
},
|
|
"copyMethodsOnInstances": {
|
|
"type": "boolean",
|
|
"description": "Copy Method declarations into Object instances",
|
|
"default": false
|
|
},
|
|
"maxSecureChannels": {
|
|
"type": "integer",
|
|
"description": "Maximum number of secure channels",
|
|
"minimum": 0
|
|
},
|
|
"maxSecurityTokenLifetime": {
|
|
"type": "integer",
|
|
"description": "Maximum security token lifetime in milliseconds",
|
|
"minimum": 0
|
|
},
|
|
"maxSessions": {
|
|
"type": "integer",
|
|
"description": "Maximum number of sessions",
|
|
"minimum": 0
|
|
},
|
|
"maxSessionTimeout": {
|
|
"type": "number",
|
|
"description": "Maximum session timeout in milliseconds",
|
|
"minimum": 0
|
|
},
|
|
"maxNodesPerRead": {
|
|
"type": "integer",
|
|
"description": "Maximum nodes per read operation",
|
|
"minimum": 0
|
|
},
|
|
"maxNodesPerWrite": {
|
|
"type": "integer",
|
|
"description": "Maximum nodes per write operation",
|
|
"minimum": 0
|
|
},
|
|
"maxNodesPerMethodCall": {
|
|
"type": "integer",
|
|
"description": "Maximum nodes per method call",
|
|
"minimum": 0
|
|
},
|
|
"maxNodesPerBrowse": {
|
|
"type": "integer",
|
|
"description": "Maximum nodes per browse operation",
|
|
"minimum": 0
|
|
},
|
|
"maxNodesPerRegisterNodes": {
|
|
"type": "integer",
|
|
"description": "Maximum nodes per register nodes operation",
|
|
"minimum": 0
|
|
},
|
|
"maxNodesPerTranslateBrowsePathsToNodeIds": {
|
|
"type": "integer",
|
|
"description": "Maximum nodes per translate browse paths operation",
|
|
"minimum": 0
|
|
},
|
|
"maxNodesPerNodeManagement": {
|
|
"type": "integer",
|
|
"description": "Maximum nodes per node management operation",
|
|
"minimum": 0
|
|
},
|
|
"maxMonitoredItemsPerCall": {
|
|
"type": "integer",
|
|
"description": "Maximum monitored items per call",
|
|
"minimum": 0
|
|
},
|
|
"maxReferencesPerNode": {
|
|
"type": "integer",
|
|
"description": "Maximum references per node",
|
|
"minimum": 0
|
|
},
|
|
"reverseReconnectInterval": {
|
|
"type": "integer",
|
|
"description": "Interval for reverse reconnect attempts in milliseconds",
|
|
"minimum": 0
|
|
},
|
|
"asyncOperationTimeout": {
|
|
"type": "number",
|
|
"description": "Timeout for async operations in seconds (only if multithreading enabled)",
|
|
"minimum": 0
|
|
},
|
|
"maxAsyncOperationQueueSize": {
|
|
"type": "integer",
|
|
"description": "Maximum async operation queue size (only if multithreading enabled)",
|
|
"minimum": 0
|
|
},
|
|
"discoveryCleanupTimeout": {
|
|
"type": "integer",
|
|
"description": "Discovery cleanup timeout in milliseconds (only if discovery enabled)",
|
|
"minimum": 0
|
|
},
|
|
"subscriptionsEnabled": {
|
|
"type": "boolean",
|
|
"description": "Enable subscriptions (only if subscriptions enabled)",
|
|
"default": true
|
|
},
|
|
"subscriptions": {
|
|
"$ref": "#/definitions/SubscriptionConfiguration",
|
|
"description": "Subscription configuration (only if subscriptions enabled)"
|
|
},
|
|
"historizingEnabled": {
|
|
"type": "boolean",
|
|
"description": "Enable historizing (only if historizing enabled)",
|
|
"default": false
|
|
},
|
|
"historizing": {
|
|
"$ref": "#/definitions/HistorizingConfiguration",
|
|
"description": "Historizing configuration (only if historizing enabled)"
|
|
},
|
|
"pubsubEnabled": {
|
|
"type": "boolean",
|
|
"description": "Enable PubSub (only if PubSub enabled)",
|
|
"default": false
|
|
},
|
|
"pubsub": {
|
|
"$ref": "#/definitions/PubsubConfiguration",
|
|
"description": "PubSub configuration (only if PubSub enabled)"
|
|
},
|
|
"securityPolicies": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "List of security policy URIs (only if encryption enabled)"
|
|
},
|
|
"pkiFolder": {
|
|
"type": "string",
|
|
"description": "Path to PKI folder (only if encryption enabled)"
|
|
}
|
|
},
|
|
"definitions": {
|
|
"BuildInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"productUri": {
|
|
"type": "string",
|
|
"description": "Product URI"
|
|
},
|
|
"manufacturerName": {
|
|
"type": "string",
|
|
"description": "Manufacturer name"
|
|
},
|
|
"productName": {
|
|
"type": "string",
|
|
"description": "Product name"
|
|
},
|
|
"softwareVersion": {
|
|
"type": "string",
|
|
"description": "Software version"
|
|
},
|
|
"buildNumber": {
|
|
"type": "string",
|
|
"description": "Build number"
|
|
},
|
|
"buildDate": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "Build date in ISO 8601 format"
|
|
}
|
|
}
|
|
},
|
|
"ApplicationDescription": {
|
|
"type": "object",
|
|
"properties": {
|
|
"applicationUri": {
|
|
"type": "string",
|
|
"description": "Application URI"
|
|
},
|
|
"productUri": {
|
|
"type": "string",
|
|
"description": "Product URI"
|
|
},
|
|
"applicationName": {
|
|
"$ref": "#/definitions/LocalizedText",
|
|
"description": "Application name"
|
|
},
|
|
"applicationType": {
|
|
"$ref": "#/definitions/ApplicationType",
|
|
"description": "Application type"
|
|
},
|
|
"gatewayServerUri": {
|
|
"type": "string",
|
|
"description": "Gateway server URI"
|
|
},
|
|
"discoveryProfileUri": {
|
|
"type": "string",
|
|
"description": "Discovery profile URI"
|
|
},
|
|
"discoveryUrls": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Discovery URLs"
|
|
}
|
|
}
|
|
},
|
|
"LocalizedText": {
|
|
"type": "object",
|
|
"properties": {
|
|
"locale": {
|
|
"type": "string",
|
|
"description": "Locale identifier (e.g., 'en-US', 'de-DE')"
|
|
},
|
|
"text": {
|
|
"type": "string",
|
|
"description": "Localized text content"
|
|
}
|
|
}
|
|
},
|
|
"ApplicationType": {
|
|
"oneOf": [
|
|
{
|
|
"type": "string",
|
|
"enum": ["Server", "Client", "ClientAndServer", "DiscoveryServer"]
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 3
|
|
}
|
|
],
|
|
"description": "Application type: Server (0), Client (1), ClientAndServer (2), DiscoveryServer (3)"
|
|
},
|
|
"RuleHandling": {
|
|
"oneOf": [
|
|
{
|
|
"type": "string",
|
|
"enum": ["Accept", "Warn", "Abort"]
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 2
|
|
}
|
|
],
|
|
"description": "Rule handling: Accept (0), Warn (1), Abort (2)"
|
|
},
|
|
"TcpConfiguration": {
|
|
"type": "object",
|
|
"properties": {
|
|
"tcpBufSize": {
|
|
"type": "integer",
|
|
"description": "TCP buffer size in bytes",
|
|
"minimum": 0
|
|
},
|
|
"tcpMaxMsgSize": {
|
|
"type": "integer",
|
|
"description": "TCP maximum message size in bytes",
|
|
"minimum": 0
|
|
},
|
|
"tcpMaxChunks": {
|
|
"type": "integer",
|
|
"description": "TCP maximum chunks",
|
|
"minimum": 0
|
|
}
|
|
}
|
|
},
|
|
"WebSocketConfiguration": {
|
|
"type": "object",
|
|
"properties": {
|
|
"webSocketBufSize": {
|
|
"type": "integer",
|
|
"description": "WebSocket chunk buffer size in bytes",
|
|
"minimum": 0
|
|
},
|
|
"webSocketMaxMsgSize": {
|
|
"type": "integer",
|
|
"description": "WebSocket maximum OPC UA message size in bytes; zero is unbounded",
|
|
"minimum": 0
|
|
},
|
|
"webSocketMaxChunks": {
|
|
"type": "integer",
|
|
"description": "WebSocket maximum OPC UA chunks per message; zero is unbounded",
|
|
"minimum": 0
|
|
},
|
|
"webSocketMaxQueueSize": {
|
|
"type": "integer",
|
|
"description": "Maximum bytes queued for a slow WebSocket peer",
|
|
"minimum": 1
|
|
},
|
|
"certificate": {
|
|
"type": "string",
|
|
"description": "Path to the WebSocket TLS certificate in DER or PEM format"
|
|
},
|
|
"privateKey": {
|
|
"type": "string",
|
|
"description": "Path to the WebSocket TLS private key in DER or PEM format"
|
|
},
|
|
"privateKeyPassword": {
|
|
"type": "string",
|
|
"description": "Optional password for the WebSocket TLS private key"
|
|
}
|
|
}
|
|
},
|
|
"HttpConfiguration": {
|
|
"type": "object",
|
|
"properties": {
|
|
"maxMsgSize": {
|
|
"type": "integer",
|
|
"description": "Maximum OPC UA HTTP message size on the wire in bytes; zero is unbounded",
|
|
"minimum": 0
|
|
},
|
|
"maxDecompressedMsgSize": {
|
|
"type": "integer",
|
|
"description": "Maximum request body size after HTTP content decompression; zero uses the secure 64 MiB default",
|
|
"minimum": 0
|
|
},
|
|
"timeout": {
|
|
"type": "integer",
|
|
"description": "HTTP request timeout in seconds",
|
|
"minimum": 0,
|
|
"maximum": 65535
|
|
},
|
|
"listenAddress": {
|
|
"type": "string",
|
|
"description": "HTTPS bind address; an empty string listens on all interfaces while the ServerUrl remains the advertised endpoint"
|
|
},
|
|
"certificate": {
|
|
"type": "string",
|
|
"description": "Path to the HTTPS TLS certificate in DER or PEM format"
|
|
},
|
|
"privateKey": {
|
|
"type": "string",
|
|
"description": "Path to the HTTPS TLS private key in DER or PEM format"
|
|
},
|
|
"privateKeyPassword": {
|
|
"type": "string",
|
|
"description": "Optional password for the HTTPS TLS private key"
|
|
}
|
|
}
|
|
},
|
|
"SubscriptionConfiguration": {
|
|
"type": "object",
|
|
"properties": {
|
|
"maxSubscriptions": {
|
|
"type": "integer",
|
|
"description": "Maximum number of subscriptions",
|
|
"minimum": 0
|
|
},
|
|
"maxSubscriptionsPerSession": {
|
|
"type": "integer",
|
|
"description": "Maximum subscriptions per session",
|
|
"minimum": 0
|
|
},
|
|
"publishingIntervalLimits": {
|
|
"$ref": "#/definitions/DurationRange",
|
|
"description": "Publishing interval limits"
|
|
},
|
|
"lifeTimeCountLimits": {
|
|
"$ref": "#/definitions/UInt32Range",
|
|
"description": "Lifetime count limits"
|
|
},
|
|
"keepAliveCountLimits": {
|
|
"$ref": "#/definitions/UInt32Range",
|
|
"description": "Keep alive count limits"
|
|
},
|
|
"maxNotificationsPerPublish": {
|
|
"type": "integer",
|
|
"description": "Maximum notifications per publish",
|
|
"minimum": 0
|
|
},
|
|
"enableRetransmissionQueue": {
|
|
"type": "boolean",
|
|
"description": "Enable retransmission queue",
|
|
"default": false
|
|
},
|
|
"maxRetransmissionQueueSize": {
|
|
"type": "integer",
|
|
"description": "Maximum retransmission queue size",
|
|
"minimum": 0
|
|
},
|
|
"maxEventsPerNode": {
|
|
"type": "integer",
|
|
"description": "Maximum events per node (only if events enabled)",
|
|
"minimum": 0
|
|
},
|
|
"maxMonitoredItems": {
|
|
"type": "integer",
|
|
"description": "Maximum monitored items",
|
|
"minimum": 0
|
|
},
|
|
"maxMonitoredItemsPerSubscription": {
|
|
"type": "integer",
|
|
"description": "Maximum monitored items per subscription",
|
|
"minimum": 0
|
|
},
|
|
"samplingIntervalLimits": {
|
|
"$ref": "#/definitions/DurationRange",
|
|
"description": "Sampling interval limits"
|
|
},
|
|
"queueSizeLimits": {
|
|
"$ref": "#/definitions/UInt32Range",
|
|
"description": "Queue size limits"
|
|
},
|
|
"maxPublishReqPerSession": {
|
|
"type": "integer",
|
|
"description": "Maximum publish requests per session",
|
|
"minimum": 0
|
|
}
|
|
}
|
|
},
|
|
"DurationRange": {
|
|
"type": "object",
|
|
"properties": {
|
|
"min": {
|
|
"type": "number",
|
|
"description": "Minimum duration in milliseconds",
|
|
"minimum": 0
|
|
},
|
|
"max": {
|
|
"type": "number",
|
|
"description": "Maximum duration in milliseconds",
|
|
"minimum": 0
|
|
}
|
|
}
|
|
},
|
|
"UInt32Range": {
|
|
"type": "object",
|
|
"properties": {
|
|
"min": {
|
|
"type": "integer",
|
|
"description": "Minimum value",
|
|
"minimum": 0
|
|
},
|
|
"max": {
|
|
"type": "integer",
|
|
"description": "Maximum value",
|
|
"minimum": 0
|
|
}
|
|
}
|
|
},
|
|
"HistorizingConfiguration": {
|
|
"type": "object",
|
|
"properties": {
|
|
"accessHistoryDataCapability": {
|
|
"type": "boolean",
|
|
"description": "Access history data capability",
|
|
"default": false
|
|
},
|
|
"maxReturnDataValues": {
|
|
"type": "integer",
|
|
"description": "Maximum return data values",
|
|
"minimum": 0
|
|
},
|
|
"accessHistoryEventsCapability": {
|
|
"type": "boolean",
|
|
"description": "Access history events capability",
|
|
"default": false
|
|
},
|
|
"maxReturnEventValues": {
|
|
"type": "integer",
|
|
"description": "Maximum return event values",
|
|
"minimum": 0
|
|
},
|
|
"insertDataCapability": {
|
|
"type": "boolean",
|
|
"description": "Insert data capability",
|
|
"default": false
|
|
},
|
|
"insertEventCapability": {
|
|
"type": "boolean",
|
|
"description": "Insert event capability",
|
|
"default": false
|
|
},
|
|
"insertAnnotationsCapability": {
|
|
"type": "boolean",
|
|
"description": "Insert annotations capability",
|
|
"default": false
|
|
},
|
|
"replaceDataCapability": {
|
|
"type": "boolean",
|
|
"description": "Replace data capability",
|
|
"default": false
|
|
},
|
|
"replaceEventCapability": {
|
|
"type": "boolean",
|
|
"description": "Replace event capability",
|
|
"default": false
|
|
},
|
|
"updateDataCapability": {
|
|
"type": "boolean",
|
|
"description": "Update data capability",
|
|
"default": false
|
|
},
|
|
"updateEventCapability": {
|
|
"type": "boolean",
|
|
"description": "Update event capability",
|
|
"default": false
|
|
},
|
|
"deleteRawCapability": {
|
|
"type": "boolean",
|
|
"description": "Delete raw capability",
|
|
"default": false
|
|
},
|
|
"deleteEventCapability": {
|
|
"type": "boolean",
|
|
"description": "Delete event capability",
|
|
"default": false
|
|
},
|
|
"deleteAtTimeDataCapability": {
|
|
"type": "boolean",
|
|
"description": "Delete at time data capability",
|
|
"default": false
|
|
}
|
|
}
|
|
},
|
|
"PubsubConfiguration": {
|
|
"type": "object",
|
|
"properties": {
|
|
"enableDeltaFrames": {
|
|
"type": "boolean",
|
|
"description": "Enable delta frames",
|
|
"default": false
|
|
},
|
|
"enableInformationModelMethods": {
|
|
"type": "boolean",
|
|
"description": "Enable information model methods (only if information model enabled)",
|
|
"default": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|