Litmus Edge 4.4.x - OPC UA
Get Node Root
POST {{edgeUrl}}/opcua/v2
Updated in 4.1.x:
NodeItemgainedAccessControl: AccessControlEnum(Read|Write|ReadWrite, null when unset). Existing queries that don't select it keep working.
Get Node Root
Returns the synthetic root node of the OPC UA hierarchy. The root has NodeID: "edgedevice", is a FOLDER, and has NodeSource: "import". Every other node lives under it.
Use this as the entry point when walking the tree -- list its Children, then call Get Nodes by Paths to traverse further.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
query GetNodeRoot {
GetNodeRoot {
NodeID
ParentID
Name
NodeType
NodeSource
Data { DataType TopicName }
Children
Path
WorkerNodeID
WorkerNodeIDMode
ArrayLength
}
}
No arguments.
Response
200 OK -- application/json
| Field | Type | Description |
|---|---|---|
NodeID |
string | UUID (or sentinel edgedevice for the root). |
ParentID |
string | UUID of the parent node, empty string for the root. |
Name |
string | Display name (EdgeDevice for the root). |
NodeType |
string | FOLDER, DEVICE, or TAG. |
NodeSource |
string | import (auto from DH) or manual (created via API). |
Data |
object | Non-null only for TAG nodes. {DataType, TopicName}. |
Data.DataType |
string | OPC UA data type: bool, float, int, string, ... |
Data.TopicName |
string | Source topic (a DeviceHub-published topic the node subscribes to). |
Children |
array | Direct children. May be null for leaf nodes or when not requested in the selection. |
Path |
string[] | Slash-style address used by Get Nodes by Paths. Starts with "NODE", then UUIDs. |
WorkerNodeID |
string | Stable identifier exposed to OPC UA clients (e.g. EdgeDevice). |
WorkerNodeIDMode |
string | hierarchical (auto-derived) or fixed. |
ArrayLength |
integer | Non-null for tag nodes whose data is array-typed. |
{
"data": {
"GetNodeRoot": {
"NodeID": "edgedevice",
"ParentID": "",
"Name": "EdgeDevice",
"NodeType": "FOLDER",
"NodeSource": "import",
"Data": null,
"Children": null,
"Path": ["NODE", "edgedevice"],
"WorkerNodeID": "EdgeDevice",
"WorkerNodeIDMode": "fixed",
"ArrayLength": null
}
}
}
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
query GetNodeRoot {
GetNodeRoot {
NodeID
ParentID
Name
NodeType
AccessControl
NodeSource
Data {
DataType
TopicName
}
Children
Path
WorkerNodeID
WorkerNodeIDMode
ArrayLength
}
}
Response
Status: 200 OK
{
"data": {
"GetNodeRoot": {
"NodeID": "edgedevice",
"ParentID": "",
"Name": "EdgeDevice",
"NodeType": "FOLDER",
"NodeSource": "import",
"Data": null,
"Children": null,
"Path": [
"NODE",
"edgedevice"
],
"WorkerNodeID": "EdgeDevice",
"WorkerNodeIDMode": "fixed",
"ArrayLength": null
}
}
}
Get Nodes by Paths
POST {{edgeUrl}}/opcua/v2
Updated in 4.1.x:
NodeItemgainedAccessControl: AccessControlEnum(Read|Write|ReadWrite, null when unset). Existing queries that don't select it keep working.
Get Nodes by Paths
Returns the children of the node addressed by Path. Use this to walk the hierarchy depth-first: start at ["NODE", "edgedevice"], read its children, then dive in by appending each child's NodeID.
The response is an array because the query supports addressing multiple nodes in one call (one path per element), although the Postman example uses a single path.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
query GetNodesByPath($input: GetNodeByPathRequest!) {
GetNodesByPath(input: $input) {
NodeID
ParentID
Name
NodeType
NodeSource
Data { DataType TopicName }
Children
Path
WorkerNodeID
WorkerNodeIDMode
ArrayLength
}
}
Variables
| Field | Type | Required | Description |
|---|---|---|---|
Path |
[String!] |
Yes | Slash-style path. Starts with the literal "NODE", followed by NodeIDs from root downward. |
{
"input": {
"Path": ["NODE", "edgedevice"]
}
}
Response
200 OK -- application/json. Array of nodes -- the children of the addressed node. See Get Node Root for the per-field reference.
{
"data": {
"GetNodesByPath": [
{
"NodeID": "8b43db5e-e32e-4780-8387-63b37cf2ff00",
"ParentID": "edgedevice",
"Name": "tag1",
"NodeType": "TAG",
"NodeSource": "manual",
"Data": { "DataType": "bool", "TopicName": "tag1" },
"Children": null,
"Path": ["NODE", "edgedevice", "8b43db5e-e32e-4780-8387-63b37cf2ff00"],
"WorkerNodeID": "EdgeDevice.tag1",
"WorkerNodeIDMode": "hierarchical",
"ArrayLength": null
}
]
}
}
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
query GetNodesByPath($input: GetNodeByPathRequest!) {
GetNodesByPath(input: $input) {
NodeID
ParentID
Name
NodeType
AccessControl
NodeSource
Data {
DataType
TopicName
}
Children
Path
WorkerNodeID
WorkerNodeIDMode
ArrayLength
}
}
Variables
{
"input": {
"Path": [
"NODE",
"edgedevice"
]
}
}
Response
Status: 200 OK
{
"data": {
"GetNodesByPath": [
{
"NodeID": "8b43db5e-e32e-4780-8387-63b37cf2ff00",
"ParentID": "edgedevice",
"Name": "tag1",
"NodeType": "TAG",
"NodeSource": "manual",
"Data": {
"DataType": "bool",
"TopicName": "tag1"
},
"Children": null,
"Path": [
"NODE",
"edgedevice",
"8b43db5e-e32e-4780-8387-63b37cf2ff00"
],
"WorkerNodeID": "EdgeDevice.tag1",
"WorkerNodeIDMode": "hierarchical",
"ArrayLength": null
}
]
}
}
Add Node - Folder
POST {{edgeUrl}}/opcua/v2
Add Node - Folder
Requires: a
ParentID, either the root'sNodeIDfromGet Node Rootor a node ID returned by an earlierAdd Nodecall. An unknown parent fails withparent node "<id>" not found.
Creates a new FOLDER node under an existing parent. Folders are purely organizational and do not bind to any data source.
Three node kinds use the same CreateNode mutation, differing only by the NodeType value:
FOLDER-- organizational container.DEVICE-- like FOLDER but semantically marks a device boundary.TAG-- leaf node bound to a DeviceHub topic viaData.TopicName/Data.DataType.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
mutation CreateNode($input: NodeRequest!) {
CreateNode(input: $input)
}
Variables (input: NodeRequest!)
| Field | Type | Required | Description |
|---|---|---|---|
Name |
String! |
Yes | Display name. Must be unique among the parent's children. |
NodeType |
String! |
Yes | FOLDER, DEVICE, or TAG. |
ParentID |
String! |
Yes | UUID (or edgedevice for the root) of the parent node. |
WorkerNodeIDMode |
String! |
Yes | hierarchical (NodeID derived from path) or fixed (use WorkerNodeID explicitly). |
WorkerNodeID |
String? |
No | Required when WorkerNodeIDMode: "fixed". The literal NodeID exposed to OPC UA clients. |
Data |
NodeData? |
mixed | Required for NodeType: "TAG". {TopicName, DataType} binding the tag to a DeviceHub topic. |
Variables (example)
{
"input": {
"Name": "apiFolder",
"NodeType": "FOLDER",
"WorkerNodeIDMode": "hierarchical",
"ParentID": "edgedevice"
}
}
Response
200 OK -- application/json. Returns the new node's UUID as a string.
{
"data": {
"CreateNode": "1932e708-4a11-4d0e-87ac-a650bf4d7bf9"
}
}
Save the returned UUID as {{opc_node_id}} for follow-up calls.
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
mutation CreateNode($input: NodeRequest!) {
CreateNode(input: $input)
}
Variables
{
"input": {
"Name": "apiFolder",
"NodeType": "FOLDER",
"WorkerNodeIDMode": "hierarchical",
"ParentID": "edgedevice"
}
}
Response
Status: 200 OK
{
"data": {
"CreateNode": "1932e708-4a11-4d0e-87ac-a650bf4d7bf9"
}
}
Add Node - Device
POST {{edgeUrl}}/opcua/v2
Add Node - Device
Requires: a
ParentID, either the root fromGet Node Rootor a FOLDER node's ID fromAdd Node - Folder.
Creates a new DEVICE node. DEVICE nodes are organizational like FOLDER but mark a logical device boundary so external OPC UA clients can detect device-level grouping.
Three node kinds use the same CreateNode mutation, differing only by the NodeType value:
FOLDER-- organizational container.DEVICE-- like FOLDER but semantically marks a device boundary.TAG-- leaf node bound to a DeviceHub topic viaData.TopicName/Data.DataType.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
mutation CreateNode($input: NodeRequest!) {
CreateNode(input: $input)
}
Variables (input: NodeRequest!)
| Field | Type | Required | Description |
|---|---|---|---|
Name |
String! |
Yes | Display name. Must be unique among the parent's children. |
NodeType |
String! |
Yes | FOLDER, DEVICE, or TAG. |
ParentID |
String! |
Yes | UUID (or edgedevice for the root) of the parent node. |
WorkerNodeIDMode |
String! |
Yes | hierarchical (NodeID derived from path) or fixed (use WorkerNodeID explicitly). |
WorkerNodeID |
String? |
No | Required when WorkerNodeIDMode: "fixed". The literal NodeID exposed to OPC UA clients. |
Data |
NodeData? |
mixed | Required for NodeType: "TAG". {TopicName, DataType} binding the tag to a DeviceHub topic. |
Variables (example)
{
"input": {
"Name": "apiDevice",
"NodeType": "DEVICE",
"WorkerNodeIDMode": "hierarchical",
"WorkerNodeID": null,
"ParentID": "edgedevice"
}
}
Response
200 OK -- application/json. Returns the new node's UUID as a string.
{
"data": {
"CreateNode": "d508ec1b-25da-4ceb-abdd-20e4fe37f863"
}
}
Save the returned UUID as {{opc_node_id}} for follow-up calls.
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
mutation CreateNode($input: NodeRequest!) {
CreateNode(input: $input)
}
Variables
{
"input": {
"Name": "apiDevice",
"NodeType": "DEVICE",
"WorkerNodeIDMode": "hierarchical",
"WorkerNodeID": null,
"ParentID": "edgedevice"
}
}
Response
Status: 200 OK
{
"data": {
"CreateNode": "d508ec1b-25da-4ceb-abdd-20e4fe37f863"
}
}
Add Node - Tag
POST {{edgeUrl}}/opcua/v2
Requires: a parent node ID, normally a DEVICE node from
Add Node - Device. The server also accepts a FOLDER as the parent.Data.TopicNameis not checked against DeviceHub, so a misspelt topic creates a tag node that never receives a value.
Updated in 4.2.x. CreateNode gained an optional originId argument, echoed back on the resulting SubscribeTreeChanged event.
Unchanged otherwise. Calls that omit originId behave exactly as in 4.1.x.
Request Body
GraphQL Query
mutation CreateNode($input: NodeRequest!, $originId: String) {
CreateNode(input: $input, originId: $originId)
}
Variables
{
"input": {
"ParentID": "edgedevice",
"Name": "apiTag",
"NodeType": "TAG",
"WorkerNodeIDMode": "hierarchical",
"WorkerNodeID": null,
"Data": {
"TopicName": "devicehub.topic",
"DataType": "float"
},
"AccessControl": "ReadWrite"
},
"originId": "{{opc_origin_id}}"
}
Update Node by ID
POST {{edgeUrl}}/opcua/v2
DEPRECATED in 4.2.x. Use UpdateNodeByRef, which addresses the node by (ID, ParentID) and is unambiguous when node IDs collide. UpdateNode still works and is not scheduled for removal in this release.
Also updated in 4.2.x: gained an optional originId argument, and NodeRequest gained an optional ExpectedVersion field for optimistic concurrency. A stale ExpectedVersion is rejected with VERSION_CONFLICT.
Read Version off the node first, pass it as ExpectedVersion, and the update is rejected if the node changed since. Both fields are optional; 4.1.x-style calls still work.
Request Body
GraphQL Query
mutation UpdateNode($nodeID: NodeID!, $input: NodeRequest!, $originId: String) {
UpdateNode(nodeID: $nodeID, input: $input, originId: $originId)
}
Variables
{
"nodeID": "{{opc_node_id}}",
"input": {
"ParentID": "edgedevice",
"Name": "apiTag",
"NodeType": "TAG",
"Data": {
"DataType": "float",
"TopicName": "devicehub.topic"
},
"WorkerNodeID": "EdgeDevice.apiTag",
"WorkerNodeIDMode": "hierarchical",
"AccessControl": "Read",
"ExpectedVersion": "{{opc_node_version}}"
},
"originId": "{{opc_origin_id}}"
}
Remove Single Node by ID
POST {{edgeUrl}}/opcua/v2
Also deletes: every node beneath it. Removing a FOLDER removes its DEVICE and TAG nodes in the same call.
DEPRECATED in 4.2.x. Use DeleteNodeByRef. DeleteNode still works.
Also updated in 4.2.x: gained optional expectedVersion and originId arguments. Both may be omitted for the 4.1.x behaviour. A stale expectedVersion is rejected with VERSION_CONFLICT.
Request Body
GraphQL Query
mutation DeleteNode($input: NodeID!, $expectedVersion: ID, $originId: String) {
DeleteNode(input: $input, expectedVersion: $expectedVersion, originId: $originId)
}
Variables
{
"input": "{{opc_node_id}}",
"expectedVersion": "{{opc_node_version}}",
"originId": "{{opc_origin_id}}"
}
Reset Imported Hierarchy
POST {{edgeUrl}}/opcua/v2
Reset Imported Hierarchy
Removes every node whose NodeSource is import -- i.e. every node that was auto-created when importing DeviceHub tags. Nodes created via the API (NodeSource: "manual") are preserved.
The ResetNodes mutation takes a single SourceType selector:
SourceType |
Effect |
|---|---|
Import |
Removes nodes auto-imported from DeviceHub (NodeSource: "import"). |
Manual |
Removes nodes created via this API (NodeSource: "manual"). |
All |
Removes every node (effectively wiping the address space back to the synthetic root). |
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
mutation ResetNodes($input: NodeResetRequest!) {
ResetNodes(input: $input)
}
Variables
| Field | Type | Required | Description |
|---|---|---|---|
SourceType |
String! |
Yes | One of Import, Manual, All. Selects which nodes to remove. |
{
"input": { "SourceType": "Import" }
}
Response
200 OK -- application/json. No data returned on success.
{ "data": { "ResetNodes": null } }
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
Recoverability
There is no undo. Snapshot the hierarchy with Export As JSON before calling this if you may want to restore.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
mutation ResetNodes($input: NodeResetRequest!) {
ResetNodes(input: $input)
}
Variables
{
"input": {
"SourceType": "Import"
}
}
Response
Status: 200 OK
{
"data": {
"ResetNodes": null
}
}
Reset Manually Created Hierarchy
POST {{edgeUrl}}/opcua/v2
Reset Manually Created Hierarchy
Removes every node whose NodeSource is manual -- i.e. every node created via the OPC UA API. Auto-imported DeviceHub nodes (NodeSource: "import") are preserved.
The ResetNodes mutation takes a single SourceType selector:
SourceType |
Effect |
|---|---|
Import |
Removes nodes auto-imported from DeviceHub (NodeSource: "import"). |
Manual |
Removes nodes created via this API (NodeSource: "manual"). |
All |
Removes every node (effectively wiping the address space back to the synthetic root). |
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
mutation ResetNodes($input: NodeResetRequest!) {
ResetNodes(input: $input)
}
Variables
| Field | Type | Required | Description |
|---|---|---|---|
SourceType |
String! |
Yes | One of Import, Manual, All. Selects which nodes to remove. |
{
"input": { "SourceType": "Manual" }
}
Response
200 OK -- application/json. No data returned on success.
{ "data": { "ResetNodes": null } }
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
Recoverability
There is no undo. Snapshot the hierarchy with Export As JSON before calling this if you may want to restore.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
mutation ResetNodes($input: NodeResetRequest!) {
ResetNodes(input: $input)
}
Variables
{
"input": {
"SourceType": "Manual"
}
}
Response
Status: 200 OK
{
"data": {
"ResetNodes": null
}
}
Reset All Hierarchy
POST {{edgeUrl}}/opcua/v2
Reset All Hierarchy
Removes every node, regardless of NodeSource. The hierarchy is reset to just the synthetic root.
The ResetNodes mutation takes a single SourceType selector:
SourceType |
Effect |
|---|---|
Import |
Removes nodes auto-imported from DeviceHub (NodeSource: "import"). |
Manual |
Removes nodes created via this API (NodeSource: "manual"). |
All |
Removes every node (effectively wiping the address space back to the synthetic root). |
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
mutation ResetNodes($input: NodeResetRequest!) {
ResetNodes(input: $input)
}
Variables
| Field | Type | Required | Description |
|---|---|---|---|
SourceType |
String! |
Yes | One of Import, Manual, All. Selects which nodes to remove. |
{
"input": { "SourceType": "All" }
}
Response
200 OK -- application/json. No data returned on success.
{ "data": { "ResetNodes": null } }
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
Recoverability
There is no undo. Snapshot the hierarchy with Export As JSON before calling this if you may want to restore.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
mutation ResetNodes($input: NodeResetRequest!) {
ResetNodes(input: $input)
}
Variables
{
"input": {
"SourceType": "All"
}
}
Response
Status: 200 OK
{
"data": {
"ResetNodes": null
}
}
Export As JSON
POST {{edgeUrl}}/opcua/v2
Export As JSON
Exports all of the nodes in the hierarchy as a nested JSON tree. In the LE UI this lives under the Hierarchy pane's Action menu and downloads straight to disk; the option only appears when a hierarchy exists.
Use this for backups, source-control snapshots, or migration to another device (re-import via Import JSON).
The query is named GetNodeTree; the response payload is the same shape UploadHierarchy (Import JSON) accepts.
Use Postman's Send and Download button if you want the response body saved straight to disk.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
```
The operation is chosen by the GraphQL query body, not the URL path.
## Authentication
HTTP Basic Auth. **Username** is your API token, **password** is empty. The same token is valid across `/devicehub/v2`, `/analytics/v2`, `/cc`, `/opcua`, and the other LE services.
## Request body
``` graphql
query GetNodeTree {
GetNodeTree
}
```
No arguments.
## Response
`200 OK` -- `application/json`. `data.GetNodeTree` is the root node of the tree, with `children` recursively populated. The wire field names are **lower_snake_case** in this projection (`worker_node_id`, `node_source`) -- contrast with the PascalCase used by `Get Node Root` / `GetNodesByPath`. Both shapes describe the same data; this one is the round-trip format for `Import JSON`.
``` json
{
"data": {
"GetNodeTree": {
"id": "edgedevice",
"parent_id": "",
"name": "EdgeDevice",
"type": "FOLDER",
"node_source": "import",
"data": null,
"children": null,
"path": ["NODE", "edgedevice"],
"worker_node_id": "EdgeDevice",
"worker_node_id_mode": "fixed"
}
}
}
```
## Errors
GraphQL endpoints return `200 OK` even on logical errors. Inspect the `errors` array in the response body:
``` json
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
```
| `extensions.code` | Meaning |
| --- | --- |
| `UNAUTHENTICATED` | Missing or invalid API token. |
| `FORBIDDEN` | Token lacks permission for this operation. |
| `BAD_USER_INPUT` | Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
| `NOT_FOUND` | The targeted entity does not exist. |
| `INTERNAL_SERVER_ERROR` | DeviceHub fault. Retry, then escalate via `System > Support`. |
A non-`200` HTTP response means DeviceHub itself is unreachable. See `Dashboard > DeviceHub Status`.
> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
### Request Body
**GraphQL Query**
```graphql
query GetNodeTree {
GetNodeTree
}
Response
Status: 200 OK
{
"data": {
"GetNodeTree": {
"id": "edgedevice",
"parent_id": "",
"name": "EdgeDevice",
"type": "FOLDER",
"node_source": "import",
"data": null,
"children": null,
"path": [
"NODE",
"edgedevice"
],
"worker_node_id": "EdgeDevice",
"worker_node_id_mode": "fixed"
}
}
}
Import JSON
POST {{edgeUrl}}/opcua/v2
Import JSON
Imports nodes from a JSON document into the OPC UA hierarchy. The imported nodes are merged with the existing hierarchy -- they do not replace it. Existing nodes whose IDs match nodes in the import are updated; the rest of the tree is left intact.
Action required after import: the OPC UA server must be reset for the merged hierarchy to take effect. Stop and start the server with
Management > Stop OPC UA Servicefollowed byManagement > Start OPC UA Service. See the LE UI's Manage the OPC UA Server documentation for the equivalent UI flow.
The mutation accepts the snake_case JSON shape produced by Export As JSON -- you can round-trip an export verbatim.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
```
The operation is chosen by the GraphQL query body, not the URL path.
## Authentication
HTTP Basic Auth. **Username** is your API token, **password** is empty. The same token is valid across `/devicehub/v2`, `/analytics/v2`, `/cc`, `/opcua`, and the other LE services.
## Request body
``` graphql
mutation UploadHierarchy($input: Any!) {
UploadHierarchy(input: $input)
}
```
### Variables
The `input` is the root tree from `Export As JSON` -- a single object with `id`, `name`, `type: "FOLDER"`, and a recursive `children` array.
``` json
{
"input": {
"id": "a335157b-013b-415e-8138-8c78faa571ee",
"parent_id": "",
"name": "EdgeDevice",
"type": "FOLDER",
"node_source": "manual",
"data": null,
"children": [
{
"id": "10c45ba5-589b-4034-8bfb-45684c67c9...",
"...": "..."
}
]
}
}
```
## Response
`200 OK` -- `application/json`. No data returned on success.
``` json
{ "data": { "UploadHierarchy": null } }
```
## Post-import steps
``` text
1. Import JSON -> hierarchy is merged in storage
2. Management > Stop OPC UA Service
3. Management > Start OPC UA Service -> merged hierarchy is now served
4. Connections > Get Server Metrics -> verify clients can reconnect
```
Until the service is reset, **external OPC UA clients continue to see the pre-import hierarchy** even though the storage has been merged.
## Errors
GraphQL endpoints return `200 OK` even on logical errors. Inspect the `errors` array in the response body:
``` json
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
```
| `extensions.code` | Meaning |
| --- | --- |
| `UNAUTHENTICATED` | Missing or invalid API token. |
| `FORBIDDEN` | Token lacks permission for this operation. |
| `BAD_USER_INPUT` | Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
| `NOT_FOUND` | The targeted entity does not exist. |
| `INTERNAL_SERVER_ERROR` | DeviceHub fault. Retry, then escalate via `System > Support`. |
A non-`200` HTTP response means DeviceHub itself is unreachable. See `Dashboard > DeviceHub Status`.
### To replace instead of merge
If you want a true replacement (not a merge), wipe first then import:
1. `Reset All Hierarchy` (`SourceType: "All"`).
2. `Import JSON`.
3. Stop / Start the service.
> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
### Request Body
**GraphQL Query**
```graphql
mutation UploadHierarchy($input: Any!) {
UploadHierarchy(input: $input)
}
Variables
{
"input": {
"id": "a335157b-013b-415e-8138-8c78faa571ee",
"parent_id": "",
"name": "EdgeDevice",
"type": "FOLDER",
"node_source": "manual",
"data": null,
"children": [
{
"id": "10c45ba5-589b-4034-8bfb-45684c67c9e1",
"parent_id": "a335157b-013b-415e-8138-8c78faa571ee",
"name": "device1",
"type": "DEVICE",
"node_source": "manual",
"data": null,
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"10c45ba5-589b-4034-8bfb-45684c67c9e1"
]
},
{
"id": "231b695d-8603-4bc2-bcc9-abec6caca02a",
"parent_id": "a335157b-013b-415e-8138-8c78faa571ee",
"name": "Device1",
"type": "TAG",
"node_source": "manual",
"data": {
"dataType": "int32",
"topic": "tag1"
},
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"231b695d-8603-4bc2-bcc9-abec6caca02a"
]
},
{
"id": "41FBD12E-C6CD-4539-AD50-336D278B207C",
"parent_id": "a335157b-013b-415e-8138-8c78faa571ee",
"name": "Rack 2b M258",
"type": "DEVICE",
"node_source": "import",
"data": null,
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"41FBD12E-C6CD-4539-AD50-336D278B207C"
]
},
{
"id": "474E42B0-C7B8-42DE-8DE2-FFED7030A563",
"parent_id": "a335157b-013b-415e-8138-8c78faa571ee",
"name": "DTA windows tia",
"type": "DEVICE",
"node_source": "import",
"data": null,
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"474E42B0-C7B8-42DE-8DE2-FFED7030A563"
]
},
{
"id": "4C4B9CCC-F5E4-4C2E-A4C0-EAF5C32B0D1A",
"parent_id": "a335157b-013b-415e-8138-8c78faa571ee",
"name": "AB CLX API testing",
"type": "DEVICE",
"node_source": "import",
"data": null,
"children": [
{
"id": "8BA821A2-CC97-48DE-9AB4-35AA3CE69BDD",
"parent_id": "4C4B9CCC-F5E4-4C2E-A4C0-EAF5C32B0D1A",
"name": "cAM_BadVoltageAllPot",
"type": "TAG",
"node_source": "import",
"data": {
"dataType": "bool",
"topic": "devicehub.alias.AB_CLX_API_testing.cAM_BadVoltageAllPot"
},
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"4C4B9CCC-F5E4-4C2E-A4C0-EAF5C32B0D1A",
"8BA821A2-CC97-48DE-9AB4-35AA3CE69BDD"
]
}
],
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"4C4B9CCC-F5E4-4C2E-A4C0-EAF5C32B0D1A"
]
},
{
"id": "70a2d234-5df7-4e4c-8985-971f907e3a07",
"parent_id": "a335157b-013b-415e-8138-8c78faa571ee",
"name": "folder1",
"type": "FOLDER",
"node_source": "manual",
"data": null,
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"70a2d234-5df7-4e4c-8985-971f907e3a07"
]
},
{
"id": "779F42F3-54FC-4A87-B9A6-CD39CFA4A97D",
"parent_id": "a335157b-013b-415e-8138-8c78faa571ee",
"name": "Simulator2",
"type": "DEVICE",
"node_source": "import",
"data": null,
"children": [
{
"id": "1A5572B2-8242-40C8-BC63-FFEBC7DAF1E4",
"parent_id": "779F42F3-54FC-4A87-B9A6-CD39CFA4A97D",
"name": "apiTag",
"type": "TAG",
"node_source": "import",
"data": {
"dataType": "float64",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.1A5572B2-8242-40C8-BC63-FFEBC7DAF1E4"
},
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"779F42F3-54FC-4A87-B9A6-CD39CFA4A97D",
"1A5572B2-8242-40C8-BC63-FFEBC7DAF1E4"
]
},
{
"id": "5CE8DB00-8A03-475D-865F-BB34887D51C6",
"parent_id": "779F42F3-54FC-4A87-B9A6-CD39CFA4A97D",
"name": "apiCSVTag",
"type": "TAG",
"node_source": "import",
"data": {
"dataType": "float64",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.5CE8DB00-8A03-475D-865F-BB34887D51C6"
},
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"779F42F3-54FC-4A87-B9A6-CD39CFA4A97D",
"5CE8DB00-8A03-475D-865F-BB34887D51C6"
]
}
],
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"779F42F3-54FC-4A87-B9A6-CD39CFA4A97D"
]
},
{
"id": "79F3914E-32A1-4227-AC16-023E627EB26E",
"parent_id": "a335157b-013b-415e-8138-8c78faa571ee",
"name": "aa",
"type": "DEVICE",
"node_source": "import",
"data": null,
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"79F3914E-32A1-4227-AC16-023E627EB26E"
]
},
{
"id": "89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"parent_id": "a335157b-013b-415e-8138-8c78faa571ee",
"name": "ClassificationSimulator",
"type": "DEVICE",
"node_source": "import",
"data": null,
"children": [
{
"id": "0BB9BE0A-EBC8-4932-9CCC-D9E3A994D986",
"parent_id": "89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"name": "motionTopic8",
"type": "TAG",
"node_source": "import",
"data": {
"dataType": "float64",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic8"
},
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"0BB9BE0A-EBC8-4932-9CCC-D9E3A994D986"
]
},
{
"id": "2ADE6AFF-A950-413B-82EA-2D142A76C741",
"parent_id": "89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"name": "motionTopic1",
"type": "TAG",
"node_source": "import",
"data": {
"dataType": "float64",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic1"
},
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"2ADE6AFF-A950-413B-82EA-2D142A76C741"
]
},
{
"id": "5DA5BD59-D25E-488C-A37B-B0E90649F22D",
"parent_id": "89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"name": "motionTopic6",
"type": "TAG",
"node_source": "import",
"data": {
"dataType": "float64",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic6"
},
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"5DA5BD59-D25E-488C-A37B-B0E90649F22D"
]
},
{
"id": "665E3EA1-7FFA-469F-ADCB-F9FB5472D16B",
"parent_id": "89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"name": "motionTopic5",
"type": "TAG",
"node_source": "import",
"data": {
"dataType": "float64",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic5"
},
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"665E3EA1-7FFA-469F-ADCB-F9FB5472D16B"
]
},
{
"id": "A8091B99-DBCD-4C9B-BEE1-EE571D84797A",
"parent_id": "89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"name": "motionTopic0",
"type": "TAG",
"node_source": "import",
"data": {
"dataType": "float64",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic0"
},
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"A8091B99-DBCD-4C9B-BEE1-EE571D84797A"
]
},
{
"id": "A9D97FFC-72B6-4775-AA5E-895378650B74",
"parent_id": "89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"name": "motionTopic2",
"type": "TAG",
"node_source": "import",
"data": {
"dataType": "float64",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic2"
},
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"A9D97FFC-72B6-4775-AA5E-895378650B74"
]
},
{
"id": "E3DEC8C0-EE07-4D7F-8525-26C585E2B603",
"parent_id": "89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"name": "motionTopic3",
"type": "TAG",
"node_source": "import",
"data": {
"dataType": "float64",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic3"
},
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"E3DEC8C0-EE07-4D7F-8525-26C585E2B603"
]
},
{
"id": "E4E22269-5B67-4EF2-BFD8-578072AE1A29",
"parent_id": "89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"name": "motionTopic4",
"type": "TAG",
"node_source": "import",
"data": {
"dataType": "float64",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic4"
},
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"E4E22269-5B67-4EF2-BFD8-578072AE1A29"
]
}
],
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"89C52E9A-0901-4D8D-B842-7B533F64E1B7"
]
},
{
"id": "BAFD349E-21B6-408A-AE2F-B9C682912571",
"parent_id": "a335157b-013b-415e-8138-8c78faa571ee",
"name": "Boiler",
"type": "DEVICE",
"node_source": "import",
"data": null,
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"BAFD349E-21B6-408A-AE2F-B9C682912571"
]
},
{
"id": "CDC283FB-72E2-42DF-A587-4D6299D70C9A",
"parent_id": "a335157b-013b-415e-8138-8c78faa571ee",
"name": "sim1",
"type": "DEVICE",
"node_source": "import",
"data": null,
"children": [
{
"id": "5EAEBA93-B17D-45FC-8291-CA5CFCEFB994",
"parent_id": "CDC283FB-72E2-42DF-A587-4D6299D70C9A",
"name": "sine1",
"type": "TAG",
"node_source": "import",
"data": {
"dataType": "float64",
"topic": "devicehub.alias.sim1.sine1"
},
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"CDC283FB-72E2-42DF-A587-4D6299D70C9A",
"5EAEBA93-B17D-45FC-8291-CA5CFCEFB994"
]
},
{
"id": "A21EB566-296F-41A8-8436-C5C73E2C5448",
"parent_id": "CDC283FB-72E2-42DF-A587-4D6299D70C9A",
"name": "sine2",
"type": "TAG",
"node_source": "import",
"data": {
"dataType": "float64",
"topic": "devicehub.alias.sim1.sine2"
},
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"CDC283FB-72E2-42DF-A587-4D6299D70C9A",
"A21EB566-296F-41A8-8436-C5C73E2C5448"
]
}
],
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"CDC283FB-72E2-42DF-A587-4D6299D70C9A"
]
},
{
"id": "D0C3FE53-5069-4FD7-B565-4F362AED18E9",
"parent_id": "a335157b-013b-415e-8138-8c78faa571ee",
"name": "aba",
"type": "DEVICE",
"node_source": "import",
"data": null,
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"D0C3FE53-5069-4FD7-B565-4F362AED18E9"
]
},
{
"id": "EEF5EE7F-54C7-415A-B1C7-4F9386112DEB",
"parent_id": "a335157b-013b-415e-8138-8c78faa571ee",
"name": "D14 Boiler Power PAC4200",
"type": "DEVICE",
"node_source": "import",
"data": null,
"children": null,
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee",
"EEF5EE7F-54C7-415A-B1C7-4F9386112DEB"
]
}
],
"path": [
"NODE",
"a335157b-013b-415e-8138-8c78faa571ee"
]
}
}
Response
Status: 200 OK
{
"data": {
"UploadHierarchy": null
}
}
Import Some DH Tags
POST {{edgeUrl}}/opcua/v2
Updated in 4.2.x. ImportSomeDeviceHubTagsResponse gained TruncatedDevices: [String!], with the same meaning as on ImportTopics.
Note the input type is ImportSomeDeviceTagsRequest (no Hub), taking a Tags list of { DeviceID, RegistersID }. Omit RegistersID to import every register on that device.
Request Body
GraphQL Query
mutation ImportSomeDeviceHubTags($input: ImportSomeDeviceTagsRequest!) {
ImportSomeDeviceHubTags(input: $input) {
ImportedCount
FailedCount
SkippedCount
TruncatedDevices
}
}
Variables
{
"input": {
"Tags": [
{
"DeviceID": "{{devicehub_device_uuid}}",
"RegistersID": [
"{{devicehub_tag_uuid_1}}",
"{{devicehub_tag_uuid_2}}"
]
}
]
}
}
Import all DH Tags of a Device
POST {{edgeUrl}}/opcua/v2
Import all DH Tags of a Device
Imports every DeviceHub tag from a single device into the OPC UA hierarchy. Convenience form of Import Some DH Tags with an empty RegistersID array.
The mutation reused under the hood is ImportSomeDeviceHubTags; this endpoint exists to make the "all-on-one-device" intent obvious in the collection.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
mutation ImportSomeDeviceHubTags($input: ImportSomeDeviceTagsRequest!) {
ImportSomeDeviceHubTags(input: $input) {
ImportedCount
FailedCount
SkippedCount
}
}
Variables
{
"input": {
"Tags": [
{
"DeviceID": "{{deviceID}}",
"RegistersID": []
}
]
}
}
RegistersID: [] is the "all registers on this device" signal.
Response
Same shape as Import Some DH Tags. Typical response for a device with 230 tags:
{
"data": {
"ImportSomeDeviceHubTags": {
"ImportedCount": 230,
"FailedCount": 0,
"SkippedCount": 0
}
}
}
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
mutation ImportSomeDeviceHubTags($input: ImportSomeDeviceTagsRequest!) {
ImportSomeDeviceHubTags(input: $input) {
ImportedCount
FailedCount
SkippedCount
}
}
Variables
{
"input": {
"Tags": [
{
"DeviceID": "{{deviceID}}",
"RegistersID": []
}
]
}
}
Response
Status: 200 OK
{
"data": {
"ImportSomeDeviceHubTags": {
"ImportedCount": 230,
"FailedCount": 0,
"SkippedCount": 0
}
}
}
Import ALL DH Tags
POST {{edgeUrl}}/opcua/v2
Import ALL DH Tags
Imports every DeviceHub tag from every device into the OPC UA hierarchy in one call. This is the wholesale "expose everything" shortcut.
The response is the full resulting tree -- handy for verifying the import succeeded without a separate Get Node Root / Get Nodes by Paths walk.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
mutation ImportDeviceHubTag {
ImportDeviceHubTags
}
No arguments.
Response
200 OK -- application/json. data.ImportDeviceHubTags is the root of the resulting hierarchy (same shape as Export As JSON).
{
"data": {
"ImportDeviceHubTags": {
"name": "EdgeDevice",
"type": "FOLDER",
"id": "edgedevice",
"data": null,
"children": [
{
"name": "apiTestDevice",
"type": "DEVICE",
"id": "apiTestDevice",
"node_source": "import",
"worker_node_id": "EdgeDevice.apiTestDevice",
"worker_node_id_mode": "hierarchical",
"children": []
}
]
}
}
}
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
mutation ImportDeviceHubTag {
ImportDeviceHubTags
}
Response
Status: 200 OK
{
"data": {
"ImportDeviceHubTags": {
"name": "EdgeDevice",
"type": "FOLDER",
"id": "edgedevice",
"data": null,
"children": [
{
"name": "apiTestDevice",
"type": "DEVICE",
"id": "apiTestDevice",
"node_source": "import",
"data": null,
"worker_node_id": "EdgeDevice.apiTestDevice",
"worker_node_id_mode": "hierarchical",
"children": [
{
"name": "fake123",
"type": "TAG",
"id": "fake123",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.alias.apiTestDevice.fake123"
},
"worker_node_id": "EdgeDevice.apiTestDevice.fake123",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "asdf",
"type": "TAG",
"id": "asdf",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.alias.apiTestDevice.asdf"
},
"worker_node_id": "EdgeDevice.apiTestDevice.asdf",
"worker_node_id_mode": "hierarchical",
"children": []
}
]
},
{
"name": "Rack_2b_M258",
"type": "DEVICE",
"id": "Rack_2b_M258",
"node_source": "import",
"data": null,
"worker_node_id": "EdgeDevice.Rack 2b M258",
"worker_node_id_mode": "hierarchical",
"children": [
{
"name": "fake",
"type": "TAG",
"id": "fake",
"node_source": "import",
"data": {
"dataType": "bool",
"topic": "devicehub.raw.41FBD12E-C6CD-4539-AD50-336D278B207C.EAFA65F1-C38B-48F5-BC81-1B6F5DC126C6"
},
"worker_node_id": "EdgeDevice.Rack 2b M258.fake",
"worker_node_id_mode": "hierarchical",
"children": []
}
]
},
{
"name": "DTA_windows_tia",
"type": "DEVICE",
"id": "DTA_windows_tia",
"node_source": "import",
"data": null,
"worker_node_id": "EdgeDevice.DTA windows tia",
"worker_node_id_mode": "hierarchical",
"children": null
},
{
"name": "AB_CLX_API_testing",
"type": "DEVICE",
"id": "AB_CLX_API_testing",
"node_source": "import",
"data": null,
"worker_node_id": "EdgeDevice.AB CLX API testing",
"worker_node_id_mode": "hierarchical",
"children": [
{
"name": "cAM_BadVoltageAllPot",
"type": "TAG",
"id": "cAM_BadVoltageAllPot",
"node_source": "import",
"data": {
"dataType": "bool",
"topic": "devicehub.alias.AB_CLX_API_testing.cAM_BadVoltageAllPot"
},
"worker_node_id": "EdgeDevice.AB CLX API testing.cAM_BadVoltageAllPot",
"worker_node_id_mode": "hierarchical",
"children": []
}
]
},
{
"name": "Simulator2",
"type": "DEVICE",
"id": "Simulator2",
"node_source": "import",
"data": null,
"worker_node_id": "EdgeDevice.Simulator2",
"worker_node_id_mode": "hierarchical",
"children": [
{
"name": "AirFlow16PV",
"type": "TAG",
"id": "AirFlow16PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.007398CD-51DC-47B8-A3FD-F51929EA61DF"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow16PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow7SP",
"type": "TAG",
"id": "WaterFlow7SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.01133640-EFBC-44F1-8188-A1447C00A5CC"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow7SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step7PressureSP",
"type": "TAG",
"id": "Step7PressureSP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.020EF751-10AB-433E-BF38-A9013A4B8971"
},
"worker_node_id": "EdgeDevice.Simulator2.Step7PressureSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow13PV",
"type": "TAG",
"id": "WaterFlow13PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.035CD2C9-35CF-405D-A984-1E5DFC816583"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow13PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel18PV",
"type": "TAG",
"id": "AirChannel18PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.049ED31A-F0A3-491B-92BC-D47E85237174"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel18PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration14SP",
"type": "TAG",
"id": "AirDuration14SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.04C0FEB1-227D-400B-87F7-6C8478DA7944"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration14SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration11SP",
"type": "TAG",
"id": "AirDuration11SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.05E3241F-43BB-4045-BF69-4A26EE4F5705"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration11SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay16SP",
"type": "TAG",
"id": "WaterDelay16SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.05FE7CD0-8751-4C0B-AE1F-185B86E974F8"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay16SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration19SP",
"type": "TAG",
"id": "AirDuration19SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.0671BF01-6365-482B-A08D-404ABB2BB075"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration19SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay13SP",
"type": "TAG",
"id": "WaterDelay13SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.07611094-25D2-4FF5-BD6F-8EB4B00C5CE4"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay13SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration12SP",
"type": "TAG",
"id": "WaterDuration12SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.08463862-6FF0-48DB-9B38-3B25AC7F13FC"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration12SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow3SP",
"type": "TAG",
"id": "AirFlow3SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.09EDAB62-CF5C-4841-9FE4-96E8A7BB53A0"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow3SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "PressurisationSP",
"type": "TAG",
"id": "PressurisationSP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.0A39EA69-3EBB-4321-AA5C-0C004EF73829"
},
"worker_node_id": "EdgeDevice.Simulator2.PressurisationSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step1PressureSP",
"type": "TAG",
"id": "Step1PressureSP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.0A760E01-3953-49FB-BBF2-04157B193C0E"
},
"worker_node_id": "EdgeDevice.Simulator2.Step1PressureSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow18SP",
"type": "TAG",
"id": "AirFlow18SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.0B370978-F01B-45B8-9A45-4BB8A3B520AD"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow18SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration7SP",
"type": "TAG",
"id": "AirDuration7SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.0B3BE0F5-1969-4116-AF67-D14D18C65F29"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration7SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel5PV",
"type": "TAG",
"id": "AirChannel5PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.0BF9FE07-1348-4FAC-83B3-37713C4611FC"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel5PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel16PV",
"type": "TAG",
"id": "AirChannel16PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.0F7F573F-AD8A-435D-A9E5-1A253EAA9052"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel16PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration4SP",
"type": "TAG",
"id": "WaterDuration4SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.0FCDA97E-6418-4DF4-AB0B-9B719C8148E0"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration4SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel8PV",
"type": "TAG",
"id": "AirChannel8PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.0FFEBA8C-3BD1-4257-B637-F55AD8A8DE05"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel8PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow4PV",
"type": "TAG",
"id": "AirFlow4PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.105EED56-0778-40FB-BA0F-1DD98B23D892"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow4PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow19PV",
"type": "TAG",
"id": "AirFlow19PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.10CE0BEA-D926-4E6D-83FC-461A79AB1DA8"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow19PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow10PV",
"type": "TAG",
"id": "WaterFlow10PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.1399FCAF-FA13-4CA3-A32D-9C366126B5A0"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow10PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow1SP",
"type": "TAG",
"id": "AirFlow1SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.13DEA627-851E-4B00-801C-5C428F3E5EBC"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow1SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration1SP",
"type": "TAG",
"id": "AirDuration1SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.1425F7ED-0017-4BD6-BD4B-87727648AA2F"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration1SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow11PV",
"type": "TAG",
"id": "WaterFlow11PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.1530314B-613A-4E8A-BC0D-BD28D0E9C5EB"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow11PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay9SP",
"type": "TAG",
"id": "AirDelay9SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.16953B90-212E-4A40-A8D5-81CDA2280A5C"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay9SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow11SP",
"type": "TAG",
"id": "AirFlow11SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.1A297B2B-2365-45CF-8FFB-28C5BCD67C0C"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow11SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow17SP",
"type": "TAG",
"id": "AirFlow17SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.1A6A591B-5552-4BA0-9F24-4D452CFD2D77"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow17SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow5SP",
"type": "TAG",
"id": "WaterFlow5SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.1A90845F-8949-436F-BD15-4CB5153F32EB"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow5SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow23SP",
"type": "TAG",
"id": "AirFlow23SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.1CAE0D52-E438-4F67-A9AE-844C65649A1E"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow23SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay10SP",
"type": "TAG",
"id": "AirDelay10SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.1D113184-E045-493C-BA3A-A1504AD96B65"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay10SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow3PV",
"type": "TAG",
"id": "AirFlow3PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.2326983B-9990-4A14-8214-D62F128DE158"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow3PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "MoldTemp1PV",
"type": "TAG",
"id": "MoldTemp1PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.23C11F34-D27C-4F2A-B7DA-ABCAA0A4FB64"
},
"worker_node_id": "EdgeDevice.Simulator2.MoldTemp1PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow6PV",
"type": "TAG",
"id": "WaterFlow6PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.26D1C814-82D0-4EA4-A706-57EA008C3520"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow6PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow1PV",
"type": "TAG",
"id": "WaterFlow1PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.2741C160-07FD-4284-AEDD-6085D80004AA"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow1PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel7PV",
"type": "TAG",
"id": "AirChannel7PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.2750B941-11C6-45D4-B186-4F7333C672CD"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel7PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow13PV",
"type": "TAG",
"id": "AirFlow13PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.28084D2B-AF2A-4F45-9977-B296558C5124"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow13PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow9PV",
"type": "TAG",
"id": "WaterFlow9PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.28EBC92A-3DE4-44E5-ADC8-489AD7DCBAAC"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow9PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "RamSpeedUp",
"type": "TAG",
"id": "RamSpeedUp",
"node_source": "import",
"data": {
"dataType": "bool",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.2B284910-42E0-4876-A0BE-47A4253064ED"
},
"worker_node_id": "EdgeDevice.Simulator2.RamSpeedUp",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel11PV",
"type": "TAG",
"id": "AirChannel11PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.2BB70BB8-A7EC-442E-AF3F-835F1D778E6B"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel11PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel24PV",
"type": "TAG",
"id": "AirChannel24PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.2BBC85B9-9A2C-44E5-A160-84D13AE40322"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel24PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow8SP",
"type": "TAG",
"id": "AirFlow8SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.2C696F5C-2082-44E3-9D7C-00DACCFB95E4"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow8SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration9SP",
"type": "TAG",
"id": "AirDuration9SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.2CE02B16-7BF1-4CDA-9EB2-CAD1C9AC7ED6"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration9SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay12SP",
"type": "TAG",
"id": "AirDelay12SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.2D173909-8A22-4B1B-9D27-E9A4C24D70DD"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay12SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step5PressureSP",
"type": "TAG",
"id": "Step5PressureSP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.2E833A1F-2700-4A41-A4A6-5B4B51D4DE0E"
},
"worker_node_id": "EdgeDevice.Simulator2.Step5PressureSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow2SP",
"type": "TAG",
"id": "AirFlow2SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.2ECC5790-C2C8-4E20-A5CD-1649FA0C7259"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow2SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "HalfCycle1",
"type": "TAG",
"id": "HalfCycle1",
"node_source": "import",
"data": {
"dataType": "bool",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.2F63B774-B35F-43CA-B25F-394FD41FFD5C"
},
"worker_node_id": "EdgeDevice.Simulator2.HalfCycle1",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow4SP",
"type": "TAG",
"id": "AirFlow4SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.2F884021-E5A8-4934-9BF7-9CA73B224596"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow4SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "HFDoorOpen",
"type": "TAG",
"id": "HFDoorOpen",
"node_source": "import",
"data": {
"dataType": "bool",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.30A2F3B9-83A2-46B7-8318-E975E51D54A4"
},
"worker_node_id": "EdgeDevice.Simulator2.HFDoorOpen",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow13SP",
"type": "TAG",
"id": "WaterFlow13SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.313E6FF2-5169-4DFC-9595-DFBAB62EB6FA"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow13SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration15SP",
"type": "TAG",
"id": "WaterDuration15SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.342D8268-951A-4831-BBA7-D66E3D11F0E5"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration15SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay23SP",
"type": "TAG",
"id": "AirDelay23SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.34B14B4C-3CBC-41D0-9561-2AB91BF17D22"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay23SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel2PV",
"type": "TAG",
"id": "AirChannel2PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.352A50A9-21AE-4D40-B9D1-4BDC710306DC"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel2PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterChannel12PV",
"type": "TAG",
"id": "WaterChannel12PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.37687BD5-6546-49C9-89DB-1C2841167226"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterChannel12PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "HFMetalTempPV",
"type": "TAG",
"id": "HFMetalTempPV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.38982E38-89BC-4C0C-8DB6-0A8EFEED0C5D"
},
"worker_node_id": "EdgeDevice.Simulator2.HFMetalTempPV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow20PV",
"type": "TAG",
"id": "AirFlow20PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.38E30062-C936-4037-8B08-9C02BA082960"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow20PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel10PV",
"type": "TAG",
"id": "AirChannel10PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.3A277C99-3181-4FF5-B536-D060C91D7399"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel10PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay7SP",
"type": "TAG",
"id": "AirDelay7SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.3C0CCB7A-6392-4668-B095-03B450903D9F"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay7SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step2TimeSP",
"type": "TAG",
"id": "Step2TimeSP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.3CE02796-3711-400E-87EA-0AE7D3FAB287"
},
"worker_node_id": "EdgeDevice.Simulator2.Step2TimeSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow1SP",
"type": "TAG",
"id": "WaterFlow1SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.3D8FC076-57B3-46E8-8DDC-55CA58228C8D"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow1SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay2SP",
"type": "TAG",
"id": "WaterDelay2SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.3DBF7A4B-9FA7-45F5-B69A-3AF4F4A646BB"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay2SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration10SP",
"type": "TAG",
"id": "AirDuration10SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.3E28C867-FC8E-41C0-A060-549186244137"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration10SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay11SP",
"type": "TAG",
"id": "WaterDelay11SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.3E36835D-D1B8-4551-93FD-A077094E827A"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay11SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration15SP",
"type": "TAG",
"id": "AirDuration15SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.3EDBDDAF-9707-4687-B250-D4FC846D309C"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration15SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel19PV",
"type": "TAG",
"id": "AirChannel19PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.4146B7AA-06C9-452B-A94D-DFF4751719B8"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel19PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "MoldTemp4PV",
"type": "TAG",
"id": "MoldTemp4PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.43011C4F-90D3-4491-B8AE-04E11C4BD614"
},
"worker_node_id": "EdgeDevice.Simulator2.MoldTemp4PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Mold",
"type": "TAG",
"id": "Mold",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.458B95A1-5079-4A26-8A3C-3993C423C963"
},
"worker_node_id": "EdgeDevice.Simulator2.Mold",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay4SP",
"type": "TAG",
"id": "WaterDelay4SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.45DEB525-CE9F-4733-8BDC-55F719999E50"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay4SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration18SP",
"type": "TAG",
"id": "AirDuration18SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.47EFDBA0-517B-4791-ABAD-2526B90B2275"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration18SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterTempPV",
"type": "TAG",
"id": "WaterTempPV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.4813C546-8947-4D42-8B3B-496F71703C4F"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterTempPV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow16PV",
"type": "TAG",
"id": "WaterFlow16PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.495C9AF9-E495-4948-9811-D6457191CE64"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow16PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow4PV",
"type": "TAG",
"id": "WaterFlow4PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.4A28046D-948B-485F-B449-A797A642B603"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow4PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "HFMetalTempSP",
"type": "TAG",
"id": "HFMetalTempSP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.4CBEEB37-C07A-43D8-BFC9-C591CC523FFD"
},
"worker_node_id": "EdgeDevice.Simulator2.HFMetalTempSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow15PV",
"type": "TAG",
"id": "AirFlow15PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.4CCBBA4A-40EA-4062-96B3-BE2BE59AD4D6"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow15PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow16SP",
"type": "TAG",
"id": "AirFlow16SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.4D6C1FB5-EBB9-41C3-828C-D90F267B8491"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow16SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration8SP",
"type": "TAG",
"id": "WaterDuration8SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.4E4CDE8D-2879-41B2-ACFB-945B2E151B7F"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration8SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay19SP",
"type": "TAG",
"id": "AirDelay19SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.4F1E2CE9-7317-4114-9CFF-8E52B81ACF50"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay19SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step5TimeSP",
"type": "TAG",
"id": "Step5TimeSP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.55F4925D-82CA-4800-BEA8-0A3449726D1C"
},
"worker_node_id": "EdgeDevice.Simulator2.Step5TimeSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow11PV",
"type": "TAG",
"id": "AirFlow11PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.5603E3A3-502F-491B-BA10-EC2E45042136"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow11PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay14SP",
"type": "TAG",
"id": "WaterDelay14SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.586B583A-C111-475D-B13D-EA27228007F6"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay14SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration6SP",
"type": "TAG",
"id": "WaterDuration6SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.58B3CD67-57D2-4D9E-9B7E-8FB4D5E95154"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration6SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow8PV",
"type": "TAG",
"id": "WaterFlow8PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.5980A582-E5A5-4B8D-8FAA-797170FCB053"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow8PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow6SP",
"type": "TAG",
"id": "WaterFlow6SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.5A77DBE1-0446-48FA-8552-EB8617B5D7E9"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow6SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay15SP",
"type": "TAG",
"id": "AirDelay15SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.5BDDD1EB-6D2C-407E-B8DA-E7AC6A2B25CE"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay15SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step7TimeSP",
"type": "TAG",
"id": "Step7TimeSP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.5DFA21D6-FC78-4DC9-9E9A-FA73D9551EA0"
},
"worker_node_id": "EdgeDevice.Simulator2.Step7TimeSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration13SP",
"type": "TAG",
"id": "WaterDuration13SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.5E8D6D28-A577-48EF-9059-C9B5A0AF7D27"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration13SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration5SP",
"type": "TAG",
"id": "WaterDuration5SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.6088D0F0-66FE-4A71-A1A1-BE15229285A7"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration5SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel3PV",
"type": "TAG",
"id": "AirChannel3PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.61073BD5-4D06-4588-85D9-B9EABFC58FD9"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel3PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow14SP",
"type": "TAG",
"id": "AirFlow14SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.611A1DEA-DA2C-4337-8D62-CC4D3D49D4DF"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow14SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step6PressureSP",
"type": "TAG",
"id": "Step6PressureSP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.617E1B9D-F11D-4D8B-9CC7-6D51BD8899E4"
},
"worker_node_id": "EdgeDevice.Simulator2.Step6PressureSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration24SP",
"type": "TAG",
"id": "AirDuration24SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.65E499B4-56F5-43AE-8133-320DD1AB66F0"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration24SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay2SP",
"type": "TAG",
"id": "AirDelay2SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.67B86F3A-518A-4F5B-9858-AABB9D5A2E07"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay2SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "PartId2",
"type": "TAG",
"id": "PartId2",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.684E0337-2981-429A-AE1B-F8C281FC1B4B"
},
"worker_node_id": "EdgeDevice.Simulator2.PartId2",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "PressurisationPV",
"type": "TAG",
"id": "PressurisationPV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.693FD8A3-D186-4D2C-97D3-B2ABFA3BF7BD"
},
"worker_node_id": "EdgeDevice.Simulator2.PressurisationPV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Product",
"type": "TAG",
"id": "Product",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.6B2DDA4D-F4C7-42FB-8BF6-582914B76719"
},
"worker_node_id": "EdgeDevice.Simulator2.Product",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay3SP",
"type": "TAG",
"id": "WaterDelay3SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.6B59BA54-ADA6-4F9E-BB85-A0BA264A9F60"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay3SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow12PV",
"type": "TAG",
"id": "AirFlow12PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.6D5EC569-FFD6-4642-9599-BEAC0EDE71B4"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow12PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration11SP",
"type": "TAG",
"id": "WaterDuration11SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.6D6FBCE3-DA5E-4FB4-BB93-596D7AD3068C"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration11SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirTempPV",
"type": "TAG",
"id": "AirTempPV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.70FFE8BC-D156-4256-9291-A825057EBAFC"
},
"worker_node_id": "EdgeDevice.Simulator2.AirTempPV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration8SP",
"type": "TAG",
"id": "AirDuration8SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.72011829-8CC7-4A56-BC8D-A71A25D5EE65"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration8SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow24PV",
"type": "TAG",
"id": "AirFlow24PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.753BBAEF-FFB3-4A72-B6C6-35E6BE8F06C4"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow24PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel4PV",
"type": "TAG",
"id": "AirChannel4PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.75A6A198-ACBF-45E2-A09E-3E4CFB9A1807"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel4PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay16SP",
"type": "TAG",
"id": "AirDelay16SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.772AB7FD-900E-4209-B36E-48324BA02C5B"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay16SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay3SP",
"type": "TAG",
"id": "AirDelay3SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.77C7B31A-9F21-4345-9589-0DA26AD2032E"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay3SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration6SP",
"type": "TAG",
"id": "AirDuration6SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.782D14D8-EFBB-49E6-A047-7E47F8E456F3"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration6SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration20SP",
"type": "TAG",
"id": "AirDuration20SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.7A4FA8A3-C52A-42C3-9282-01A06BDA881C"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration20SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow14PV",
"type": "TAG",
"id": "WaterFlow14PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.7A62E47A-F2B7-4906-859E-33B7E88D998E"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow14PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay14SP",
"type": "TAG",
"id": "AirDelay14SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.7A7F95C4-44FD-46E2-81A5-D03BD1EA79BA"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay14SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow2PV",
"type": "TAG",
"id": "AirFlow2PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.7ACF6C69-8B83-48F6-9EBF-71C62D72B39C"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow2PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "PartId1",
"type": "TAG",
"id": "PartId1",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.7C086C70-E2FF-4418-A77B-292E1132A166"
},
"worker_node_id": "EdgeDevice.Simulator2.PartId1",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step2PressureSP",
"type": "TAG",
"id": "Step2PressureSP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.7E3544DE-E813-4688-B9A5-97C0CDF51709"
},
"worker_node_id": "EdgeDevice.Simulator2.Step2PressureSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay8SP",
"type": "TAG",
"id": "AirDelay8SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.7E778672-79FB-48F6-902C-18D237CE819F"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay8SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow24SP",
"type": "TAG",
"id": "AirFlow24SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.7F16DDB2-62FB-49BD-96FF-259F46C7EAE6"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow24SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "MoldTemp2PV",
"type": "TAG",
"id": "MoldTemp2PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.80B8C0D9-D61A-4B52-9493-A85DD794CDE2"
},
"worker_node_id": "EdgeDevice.Simulator2.MoldTemp2PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow19SP",
"type": "TAG",
"id": "AirFlow19SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.8179CF1A-8D84-4AEB-946C-3903BBC48389"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow19SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow22SP",
"type": "TAG",
"id": "AirFlow22SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.823D577D-B4FE-44E0-AC07-D5506FFDA025"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow22SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration4SP",
"type": "TAG",
"id": "AirDuration4SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.82693835-30E8-42EF-9F1A-3BB649B5F738"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration4SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow14SP",
"type": "TAG",
"id": "WaterFlow14SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.826DFC1E-3C4E-401D-BBDD-F4834D0B398F"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow14SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow4SP",
"type": "TAG",
"id": "WaterFlow4SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.829BAA07-6F60-4711-9E72-ED3608EC6F69"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow4SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay1SP",
"type": "TAG",
"id": "WaterDelay1SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.83FFCB83-32F2-42B0-8720-660E73F4A346"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay1SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow20SP",
"type": "TAG",
"id": "AirFlow20SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.84BF47D7-9DBD-415B-808E-98A010D9A2E2"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow20SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay8SP",
"type": "TAG",
"id": "WaterDelay8SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.8562F827-6E1E-43DD-A58A-D6AC13EA21BF"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay8SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "NormalCycle",
"type": "TAG",
"id": "NormalCycle",
"node_source": "import",
"data": {
"dataType": "bool",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.85D5E4F4-DE3B-4CD0-AE51-62A17F441BF7"
},
"worker_node_id": "EdgeDevice.Simulator2.NormalCycle",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow18PV",
"type": "TAG",
"id": "AirFlow18PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.86A215A6-6665-4F4C-9076-A6955822D16F"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow18PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay24SP",
"type": "TAG",
"id": "AirDelay24SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.88C85F1E-AA58-4C73-9998-A9D42EBE86DE"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay24SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "HalfCycle3",
"type": "TAG",
"id": "HalfCycle3",
"node_source": "import",
"data": {
"dataType": "bool",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.8925F28D-53B3-42BB-B3A8-FA8B33618D39"
},
"worker_node_id": "EdgeDevice.Simulator2.HalfCycle3",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "HoldingTimeSP",
"type": "TAG",
"id": "HoldingTimeSP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.8B4A2274-D4E3-463E-BBD0-36B1603CD295"
},
"worker_node_id": "EdgeDevice.Simulator2.HoldingTimeSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay9SP",
"type": "TAG",
"id": "WaterDelay9SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.8BD09C94-C269-4A8B-B34F-5CB8E317178D"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay9SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration16SP",
"type": "TAG",
"id": "AirDuration16SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.8BD353FE-B6A4-4C20-A828-B569C68FAB1C"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration16SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow12SP",
"type": "TAG",
"id": "AirFlow12SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.8D405273-0132-42FC-96B0-6FF6D1B4279C"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow12SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration1SP",
"type": "TAG",
"id": "WaterDuration1SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.8ED3098F-349E-4B08-A087-6EEB80F29F56"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration1SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration13SP",
"type": "TAG",
"id": "AirDuration13SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.90A5F721-3B86-4A8A-95C7-D539387C36C5"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration13SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "CatcherSpeedOut",
"type": "TAG",
"id": "CatcherSpeedOut",
"node_source": "import",
"data": {
"dataType": "bool",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.93A9D9FF-15E6-41B1-A103-1F38DEB2E19E"
},
"worker_node_id": "EdgeDevice.Simulator2.CatcherSpeedOut",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow3SP",
"type": "TAG",
"id": "WaterFlow3SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.95C40711-9381-4CE2-AE69-8C795AA4E1FD"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow3SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel13PV",
"type": "TAG",
"id": "AirChannel13PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.97DE4DD2-D0BE-4159-86BE-4FACCDDDB602"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel13PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow7SP",
"type": "TAG",
"id": "AirFlow7SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.988FAC5F-CAFA-477A-916C-BBA4DBB0AE11"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow7SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration3SP",
"type": "TAG",
"id": "WaterDuration3SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.99065854-8756-458C-B819-830CF8AAD847"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration3SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration9SP",
"type": "TAG",
"id": "WaterDuration9SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.99428415-F8B3-4532-B51C-0FCAF2E0B7F7"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration9SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay22SP",
"type": "TAG",
"id": "AirDelay22SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.9C40696C-3940-46AE-9571-CDBE55DBB897"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay22SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow17PV",
"type": "TAG",
"id": "AirFlow17PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.9CEF13C7-83B5-42F3-8791-D584E164D060"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow17PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel15PV",
"type": "TAG",
"id": "AirChannel15PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.9E66BA53-24A3-4C5E-965A-DF620B0CB9AF"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel15PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow12SP",
"type": "TAG",
"id": "WaterFlow12SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.9FA96094-04F9-4F55-A659-2E189A17A91F"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow12SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow15SP",
"type": "TAG",
"id": "WaterFlow15SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.9FCCB844-4E7D-4CA3-B074-3832A43271CE"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow15SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow8SP",
"type": "TAG",
"id": "WaterFlow8SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.A31733ED-84B6-4110-9653-61A2E5046EF2"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow8SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "MoldTemp3PV",
"type": "TAG",
"id": "MoldTemp3PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.A46AF57B-48F3-49DA-BF68-B19668D04A4F"
},
"worker_node_id": "EdgeDevice.Simulator2.MoldTemp3PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow15SP",
"type": "TAG",
"id": "AirFlow15SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.A4A8C0F3-5824-419F-BFD7-40DFE8D0F350"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow15SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel22PV",
"type": "TAG",
"id": "AirChannel22PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.A4E328FA-9832-4D7B-AC03-996BDF32E9B1"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel22PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterChannel15PV",
"type": "TAG",
"id": "WaterChannel15PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.A52DA03B-E852-4699-8910-1245DFC833C0"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterChannel15PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow6SP",
"type": "TAG",
"id": "AirFlow6SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.A5A9C47E-BD7B-4E8E-9403-F23B323BD989"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow6SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step8TimeSP",
"type": "TAG",
"id": "Step8TimeSP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.A5F9922A-1026-42EB-BACC-D9429F186EBD"
},
"worker_node_id": "EdgeDevice.Simulator2.Step8TimeSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow22PV",
"type": "TAG",
"id": "AirFlow22PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.A62FA8B2-BA7A-414B-BEA6-723B0FE07BF0"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow22PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "PartWeightSP",
"type": "TAG",
"id": "PartWeightSP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.A8C800D0-9B13-40CD-84B9-817A23AC17B1"
},
"worker_node_id": "EdgeDevice.Simulator2.PartWeightSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay12SP",
"type": "TAG",
"id": "WaterDelay12SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.A9530283-8C7F-4CEB-A60A-D376EFADC8C4"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay12SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay17SP",
"type": "TAG",
"id": "AirDelay17SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.AA0609EF-6E31-4EDA-959A-79AED0582B69"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay17SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration7SP",
"type": "TAG",
"id": "WaterDuration7SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.AB25B043-2561-4D11-B6D4-3DA86140F967"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration7SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay5SP",
"type": "TAG",
"id": "WaterDelay5SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.AC3DCCF4-B843-40DE-8A1B-4FDAFF6FFBB5"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay5SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow2SP",
"type": "TAG",
"id": "WaterFlow2SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.AD17B4A5-7CE3-4FB7-A4CA-2570C16A2011"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow2SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow10PV",
"type": "TAG",
"id": "AirFlow10PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.B02A9EC4-E4EA-493F-BC82-9258A1AEB548"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow10PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step3TimeSP",
"type": "TAG",
"id": "Step3TimeSP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.B2F0EE2A-AE46-4EBA-A510-C990CFB3C3FC"
},
"worker_node_id": "EdgeDevice.Simulator2.Step3TimeSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow23PV",
"type": "TAG",
"id": "AirFlow23PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.B3619189-9417-46A6-9A7D-5ACC63837C88"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow23PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow7PV",
"type": "TAG",
"id": "AirFlow7PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.B4A8620F-C4A6-4C9F-A0F0-E079C39D5BF2"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow7PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow9SP",
"type": "TAG",
"id": "WaterFlow9SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.B7B06973-CCB7-4314-A400-C2786F8EEB10"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow9SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration21SP",
"type": "TAG",
"id": "AirDuration21SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.B8CDF42B-8B6F-4646-92A4-52E4417A7A10"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration21SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow5SP",
"type": "TAG",
"id": "AirFlow5SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.BB156F9D-04F8-4B5B-B731-7600739DDEAC"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow5SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow9PV",
"type": "TAG",
"id": "AirFlow9PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.BD468C80-C257-4D1F-8C06-29ACE23FE7DC"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow9PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel21PV",
"type": "TAG",
"id": "AirChannel21PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.C030A692-C00F-4A02-B4AA-1FEAC7E5DA1A"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel21PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "DieClose",
"type": "TAG",
"id": "DieClose",
"node_source": "import",
"data": {
"dataType": "bool",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.C1816CDF-B574-4881-8421-0FFED125DC1A"
},
"worker_node_id": "EdgeDevice.Simulator2.DieClose",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay6SP",
"type": "TAG",
"id": "AirDelay6SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.C309619E-7B7D-4AB4-B71E-66C535FF56C0"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay6SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay20SP",
"type": "TAG",
"id": "AirDelay20SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.C3C09DC0-B9F1-40CC-95BD-EF334EC766B8"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay20SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow9SP",
"type": "TAG",
"id": "AirFlow9SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.C5E2FBC0-F33B-48DD-AF87-46B784C328C9"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow9SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterChannel11PV",
"type": "TAG",
"id": "WaterChannel11PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.C80B1464-5737-49A6-9381-F78A249CDA14"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterChannel11PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay5SP",
"type": "TAG",
"id": "AirDelay5SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.C82A4F43-1258-4CE1-B1F7-94180FA478ED"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay5SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow5PV",
"type": "TAG",
"id": "WaterFlow5PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.C967C859-D305-421A-AFF5-7C93F1A66790"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow5PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow10SP",
"type": "TAG",
"id": "WaterFlow10SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.C96C2752-CDC2-487D-A1A3-606B10A5539A"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow10SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel20PV",
"type": "TAG",
"id": "AirChannel20PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.C98EB2DA-32B1-4B0F-B792-CE3BB39DBB9B"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel20PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration12SP",
"type": "TAG",
"id": "AirDuration12SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.CA132DD6-2067-4829-8A7C-17842E9A1B51"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration12SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel17PV",
"type": "TAG",
"id": "AirChannel17PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.CA6DEB17-9C5B-4E66-9B8F-63D96306B359"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel17PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration17SP",
"type": "TAG",
"id": "AirDuration17SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.CAAA6CBA-27B6-430E-B77C-AE04F5258CC8"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration17SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow5PV",
"type": "TAG",
"id": "AirFlow5PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.CAAD3E6B-3328-4FDE-99A4-9445A397598D"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow5PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay21SP",
"type": "TAG",
"id": "AirDelay21SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.CEA6A376-6D3F-4F67-8B1B-C6DF73509BAF"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay21SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow2PV",
"type": "TAG",
"id": "WaterFlow2PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.CF5CB0A3-0F27-4BB2-82F7-B5A5CE37AE69"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow2PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel9PV",
"type": "TAG",
"id": "AirChannel9PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.D002C41C-5FA8-4F95-B5EF-14C675C12B27"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel9PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration5SP",
"type": "TAG",
"id": "AirDuration5SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.D00F2440-EFDA-4162-8E7F-5479AB380D7F"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration5SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterChannel16PV",
"type": "TAG",
"id": "WaterChannel16PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.D114FFB2-FBB3-4533-8864-1EDA1AB6ED8C"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterChannel16PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration3SP",
"type": "TAG",
"id": "AirDuration3SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.D23E4621-00ED-4ECE-A557-471663543807"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration3SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step4PressureSP",
"type": "TAG",
"id": "Step4PressureSP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.D3AECF25-D405-4F3A-9DF1-D31D365C79B5"
},
"worker_node_id": "EdgeDevice.Simulator2.Step4PressureSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow10SP",
"type": "TAG",
"id": "AirFlow10SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.D3BCD35A-3A92-4224-B80C-C2A5059D9DCC"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow10SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "MoldTempSP",
"type": "TAG",
"id": "MoldTempSP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.D538C95E-569D-4591-9C3C-6297B0F8B4DD"
},
"worker_node_id": "EdgeDevice.Simulator2.MoldTempSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel12PV",
"type": "TAG",
"id": "AirChannel12PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.D78378B6-40CB-49F9-834E-182C45C353C8"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel12PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay6SP",
"type": "TAG",
"id": "WaterDelay6SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.DAA82093-385B-45F4-83F1-E61795423426"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay6SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirPressurePV",
"type": "TAG",
"id": "AirPressurePV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.DAB98F8D-8A1F-44AD-962C-6BDA4AD09AE0"
},
"worker_node_id": "EdgeDevice.Simulator2.AirPressurePV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step4TimeSP",
"type": "TAG",
"id": "Step4TimeSP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.DC7C05E1-5BA0-4FA3-8A6F-CD3987C85F6F"
},
"worker_node_id": "EdgeDevice.Simulator2.Step4TimeSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration23SP",
"type": "TAG",
"id": "AirDuration23SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.DCBF1103-2F1F-4FDB-809F-89F6B247E804"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration23SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay7SP",
"type": "TAG",
"id": "WaterDelay7SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.DD2D8CD1-EE9C-4339-8901-3E620E8E3B44"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay7SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step8PressureSP",
"type": "TAG",
"id": "Step8PressureSP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.DF0DD4C5-EE23-4996-97AC-874A38DD6225"
},
"worker_node_id": "EdgeDevice.Simulator2.Step8PressureSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow7PV",
"type": "TAG",
"id": "WaterFlow7PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.E04CE55E-2012-4F2F-B790-5C7C8051350E"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow7PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterChannel14PV",
"type": "TAG",
"id": "WaterChannel14PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.E0787392-4F33-4FB6-9993-C95F0E5C840F"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterChannel14PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step3PressureSP",
"type": "TAG",
"id": "Step3PressureSP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.E1572296-76A2-4051-9AA1-C40B7820698C"
},
"worker_node_id": "EdgeDevice.Simulator2.Step3PressureSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterChannel13PV",
"type": "TAG",
"id": "WaterChannel13PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.E31C9AF4-BF1E-4125-A8EF-4795F815DD29"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterChannel13PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step6TimeSP",
"type": "TAG",
"id": "Step6TimeSP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.E32CAC30-CF64-42B9-B06B-36241887BB67"
},
"worker_node_id": "EdgeDevice.Simulator2.Step6TimeSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration16SP",
"type": "TAG",
"id": "WaterDuration16SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.E35E01B9-7AC6-418D-ABE6-8401951F2285"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration16SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay13SP",
"type": "TAG",
"id": "AirDelay13SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.E6F0988E-BEA9-474B-9EAC-014696F62FBE"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay13SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration14SP",
"type": "TAG",
"id": "WaterDuration14SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.E72F80AF-01CD-4F1A-A5B4-3D8F8D1CF738"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration14SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow13SP",
"type": "TAG",
"id": "AirFlow13SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.E7DAAD1E-D54F-4EB7-9936-0A37C0560109"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow13SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow3PV",
"type": "TAG",
"id": "WaterFlow3PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.E8034707-FBEE-4AEE-880F-838271FD83DF"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow3PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow21SP",
"type": "TAG",
"id": "AirFlow21SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.E99351F2-13F6-47C6-87C8-6A1BB75DD58E"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow21SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel14PV",
"type": "TAG",
"id": "AirChannel14PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.EB35803F-E727-4608-ABF7-43BEC104DDFE"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel14PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "Step1TimeSP",
"type": "TAG",
"id": "Step1TimeSP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.EB773C85-095E-4BBB-AD60-54645275D32C"
},
"worker_node_id": "EdgeDevice.Simulator2.Step1TimeSP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel23PV",
"type": "TAG",
"id": "AirChannel23PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.EC2034AD-36DC-4EFA-B541-A237B0049A29"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel23PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "RamSpeedDown",
"type": "TAG",
"id": "RamSpeedDown",
"node_source": "import",
"data": {
"dataType": "bool",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.ECBEE0DF-FEC8-459D-AFE9-7F2AB5EEDF30"
},
"worker_node_id": "EdgeDevice.Simulator2.RamSpeedDown",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay11SP",
"type": "TAG",
"id": "AirDelay11SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.EFFDA90B-2702-4D61-897C-752AB8E06214"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay11SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay4SP",
"type": "TAG",
"id": "AirDelay4SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.F1088E8E-857E-4BE6-B06C-1927A7C797ED"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay4SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow14PV",
"type": "TAG",
"id": "AirFlow14PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.F2781CA8-1650-48E0-A30E-3DF888FEAB25"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow14PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay15SP",
"type": "TAG",
"id": "WaterDelay15SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.F371E13D-B253-41D1-8AEB-562BC0C9AB00"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay15SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow16SP",
"type": "TAG",
"id": "WaterFlow16SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.F416870F-AC5B-4037-95DF-055C9226CDEB"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow16SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow11SP",
"type": "TAG",
"id": "WaterFlow11SP",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.F5F04E37-4E04-4D1E-866F-A08D448EAA31"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow11SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDelay10SP",
"type": "TAG",
"id": "WaterDelay10SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.F81A3607-161C-4878-A837-E23A577A1892"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDelay10SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirChannel6PV",
"type": "TAG",
"id": "AirChannel6PV",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.F81C8C33-F8F9-490F-812F-DAE1B19A9E10"
},
"worker_node_id": "EdgeDevice.Simulator2.AirChannel6PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration2SP",
"type": "TAG",
"id": "WaterDuration2SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.F85E5877-A90E-4180-BB27-577493D5C401"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration2SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow15PV",
"type": "TAG",
"id": "WaterFlow15PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.F862300A-63F4-43AF-B857-DC1A8F2B2391"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow15PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterDuration10SP",
"type": "TAG",
"id": "WaterDuration10SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.F8F814E5-438A-4CC0-B678-2F49A2EE3A3F"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterDuration10SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "WaterFlow12PV",
"type": "TAG",
"id": "WaterFlow12PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.F94700D2-EEDE-478C-85B4-2FADD12F3384"
},
"worker_node_id": "EdgeDevice.Simulator2.WaterFlow12PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration22SP",
"type": "TAG",
"id": "AirDuration22SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.FB31AAB2-54F5-41ED-836E-D32C03136A5F"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration22SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow6PV",
"type": "TAG",
"id": "AirFlow6PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.FB9F1277-B0D2-4377-96D7-C6AE550938A0"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow6PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDuration2SP",
"type": "TAG",
"id": "AirDuration2SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.FBBF571B-16A2-40D1-818D-74ABE0B9FDD1"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDuration2SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "HalfCycle2",
"type": "TAG",
"id": "HalfCycle2",
"node_source": "import",
"data": {
"dataType": "bool",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.FBE1A6FD-9D94-4BEB-968A-73F8BF9F520B"
},
"worker_node_id": "EdgeDevice.Simulator2.HalfCycle2",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow8PV",
"type": "TAG",
"id": "AirFlow8PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.FBEA9C28-6F8C-46BD-93E1-E76D2C7C0911"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow8PV",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirDelay18SP",
"type": "TAG",
"id": "AirDelay18SP",
"node_source": "import",
"data": {
"dataType": "string",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.FCF20558-5E63-4AD2-8883-2F4BC05820AD"
},
"worker_node_id": "EdgeDevice.Simulator2.AirDelay18SP",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "AirFlow21PV",
"type": "TAG",
"id": "AirFlow21PV",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.raw.779F42F3-54FC-4A87-B9A6-CD39CFA4A97D.FD47CC85-6139-4FD3-AAF1-4ABAF29BBA61"
},
"worker_node_id": "EdgeDevice.Simulator2.AirFlow21PV",
"worker_node_id_mode": "hierarchical",
"children": []
}
]
},
{
"name": "ClassificationSimulator",
"type": "DEVICE",
"id": "ClassificationSimulator",
"node_source": "import",
"data": null,
"worker_node_id": "EdgeDevice.ClassificationSimulator",
"worker_node_id_mode": "hierarchical",
"children": [
{
"name": "motionTopic8",
"type": "TAG",
"id": "motionTopic8",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic8"
},
"worker_node_id": "EdgeDevice.ClassificationSimulator.motionTopic8",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "motionTopic1",
"type": "TAG",
"id": "motionTopic1",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic1"
},
"worker_node_id": "EdgeDevice.ClassificationSimulator.motionTopic1",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "motionTopic6",
"type": "TAG",
"id": "motionTopic6",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic6"
},
"worker_node_id": "EdgeDevice.ClassificationSimulator.motionTopic6",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "motionTopic5",
"type": "TAG",
"id": "motionTopic5",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic5"
},
"worker_node_id": "EdgeDevice.ClassificationSimulator.motionTopic5",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "motionTopic0",
"type": "TAG",
"id": "motionTopic0",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic0"
},
"worker_node_id": "EdgeDevice.ClassificationSimulator.motionTopic0",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "motionTopic2",
"type": "TAG",
"id": "motionTopic2",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic2"
},
"worker_node_id": "EdgeDevice.ClassificationSimulator.motionTopic2",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "motionTopic3",
"type": "TAG",
"id": "motionTopic3",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic3"
},
"worker_node_id": "EdgeDevice.ClassificationSimulator.motionTopic3",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "motionTopic4",
"type": "TAG",
"id": "motionTopic4",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.alias.ClassificationSimulator.motionTopic4"
},
"worker_node_id": "EdgeDevice.ClassificationSimulator.motionTopic4",
"worker_node_id_mode": "hierarchical",
"children": []
}
]
},
{
"name": "Boiler",
"type": "DEVICE",
"id": "Boiler",
"node_source": "import",
"data": null,
"worker_node_id": "EdgeDevice.Boiler",
"worker_node_id_mode": "hierarchical",
"children": null
},
{
"name": "sim1",
"type": "DEVICE",
"id": "sim1",
"node_source": "import",
"data": null,
"worker_node_id": "EdgeDevice.sim1",
"worker_node_id_mode": "hierarchical",
"children": [
{
"name": "sine1",
"type": "TAG",
"id": "sine1",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.alias.sim1.sine1"
},
"worker_node_id": "EdgeDevice.sim1.sine1",
"worker_node_id_mode": "hierarchical",
"children": []
},
{
"name": "sine2",
"type": "TAG",
"id": "sine2",
"node_source": "import",
"data": {
"dataType": "double",
"topic": "devicehub.alias.sim1.sine2"
},
"worker_node_id": "EdgeDevice.sim1.sine2",
"worker_node_id_mode": "hierarchical",
"children": []
}
]
},
{
"name": "newest_device",
"type": "DEVICE",
"id": "newest_device",
"node_source": "import",
"data": null,
"worker_node_id": "EdgeDevice.newest device",
"worker_node_id_mode": "hierarchical",
"children": null
}
]
}
}
}
Import Topics
POST {{edgeUrl}}/opcua/v2
Updated in 4.2.x. ImportTopicsResponse gained TruncatedDevices: [String!], naming the devices whose tag list was cut short by a server-side limit.
A non-empty TruncatedDevices means the import is incomplete for those devices even though the call succeeded. Select the field to detect it; queries that omit it behave as in 4.1.x.
Request Body
GraphQL Query
mutation ImportTopics($input: ImportTopicsRequest!) {
ImportTopics(input: $input) {
DeviceHub { ImportedTags UpdatedTags SkippedTags Error }
DigitalTwins { ImportedTags UpdatedTags SkippedTags Error }
Analytics { ImportedTags UpdatedTags SkippedTags Error }
TruncatedDevices
}
}
Variables
{
"input": {
"DeviceHub": [
{
"ParentID": "{{devicehub_parent_uuid}}",
"ChildIDs": [
"{{devicehub_tag_uuid_1}}",
"{{devicehub_tag_uuid_2}}"
]
}
],
"DigitalTwins": [],
"Analytics": [],
"SelectedNodeID": "{{opc_target_folder_node_id}}"
}
}
Update Node by Ref
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Update a node addressed by NodeRef instead of by ID.
Set Update.ExpectedVersion to the Version you last read to get optimistic concurrency: the call is rejected with VERSION_CONFLICT if another client changed the node in the meantime. Omit it to force the write.
originId is an arbitrary caller-supplied string echoed back on the matching SubscribeTreeChanged event, so a client can recognise and skip its own changes.
Request Body
GraphQL Query
mutation UpdateNodeByRef($input: UpdateNodeByRefRequest!, $originId: String) {
UpdateNodeByRef(input: $input, originId: $originId)
}
Variables
{
"input": {
"Ref": {
"ID": "{{opc_node_id}}",
"ParentID": "{{opc_parent_id}}"
},
"Update": {
"ParentID": "{{opc_parent_id}}",
"Name": "apiTag",
"NodeType": "TAG",
"Data": {
"TopicName": "devicehub.topic",
"DataType": "float"
},
"WorkerNodeIDMode": "hierarchical",
"AccessControl": "ReadWrite",
"ExpectedVersion": "{{opc_node_version}}"
}
},
"originId": "{{opc_origin_id}}"
}
Delete Node by Ref
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Delete a node addressed by NodeRef.
expectedVersion guards against deleting a node someone else has since modified. Omit it to delete unconditionally.
Request Body
GraphQL Query
mutation DeleteNodeByRef($input: NodeRef!, $expectedVersion: ID, $originId: String) {
DeleteNodeByRef(input: $input, expectedVersion: $expectedVersion, originId: $originId)
}
Variables
{
"input": {
"ID": "{{opc_node_id}}",
"ParentID": "{{opc_parent_id}}"
},
"expectedVersion": "{{opc_node_version}}",
"originId": "{{opc_origin_id}}"
}
Get Service Configuration
POST {{edgeUrl}}/opcua/v2
Get Service Configuration
Returns the OPC UA server's bind configuration: the host interface, the port, and the NodeUnderRoot flag controlling address-space layout.
Endpoint
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
query GetServiceConfig {
GetServiceConfig {
Host
NodeUnderRoot
Port
}
}
No arguments.
Response
200 OK -- application/json
| Field | Type | Description |
|---|---|---|
data.GetServiceConfig.Host |
string | Bind address. 0.0.0.0 listens on every interface; otherwise an interface IP. |
data.GetServiceConfig.NodeUnderRoot |
boolean | If true, nodes are exposed under the server's standard root; if false, in a custom namespace. |
data.GetServiceConfig.Port |
integer | OPC UA TCP port. Standard is 4840. |
{
"data": {
"GetServiceConfig": {
"Host": "0.0.0.0",
"NodeUnderRoot": true,
"Port": 4840
}
}
}
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
query GetServiceConfig {
GetServiceConfig {
Host
NodeUnderRoot
Port
}
}
Response
Status: 200 OK
{
"data": {
"GetServiceConfig": {
"Host": "0.0.0.0",
"NodeUnderRoot": true,
"Port": 4840
}
}
}
Change Service Configuration
POST {{edgeUrl}}/opcua/v2
Change Service Configuration
Updates the OPC UA server's bind configuration. The new settings take effect after the next Stop OPC UA Service / Start OPC UA Service cycle -- the running listener is not reconfigured live.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
mutation SetServiceConfig($input: ServiceConfigRequest!) {
SetServiceConfig(input: $input)
}
Variables
| Field | Type | Required | Description |
|---|---|---|---|
Host |
String! |
Yes | New bind address. Use 0.0.0.0 to listen on every interface, or a specific IP. |
Port |
Int! |
Yes | TCP port (typical: 4840). Conflicts cause Start OPC UA Service to fail. |
NodeUnderRoot |
Boolean! |
Yes | Address-space layout flag (see Get Service Configuration). |
{
"input": {
"Host": "10.30.50.1",
"Port": 4840,
"NodeUnderRoot": true
}
}
Response
200 OK -- application/json. No data returned on success.
{ "data": { "SetServiceConfig": null } }
Remember to restart the service for the change to apply.
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
mutation SetServiceConfig($input: ServiceConfigRequest!) {
SetServiceConfig(input: $input)
}
Variables
{
"input": {
"NodeUnderRoot": true,
"Host": "10.30.50.1",
"Port": 4840
}
}
Response
Status: 200 OK
{
"data": {
"SetServiceConfig": null
}
}
Start OPC UA Service
POST {{edgeUrl}}/opcua/v2
Start OPC UA Service
Starts the OPC UA server listener. The server binds to Host:Port from Get Service Configuration and begins accepting external OPC UA clients. Idempotent for already-running servers.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
mutation ServiceStart {
ServiceStart
}
No arguments.
Response
200 OK -- application/json. No data returned on success.
{ "data": { "ServiceStart": null } }
A successful return does not guarantee the server is reachable -- it means the start was accepted. Confirm by calling Connections > Get Server Metrics after a brief moment.
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
mutation ServiceStart {
ServiceStart
}
Response
Status: 200 OK
{
"data": {
"ServiceStart": null
}
}
Stop OPC UA Service
POST {{edgeUrl}}/opcua/v2
Stop OPC UA Service
Stops the OPC UA server listener. External clients are disconnected gracefully; existing sessions terminate. The hierarchy is preserved in storage; restart with Start OPC UA Service.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
mutation ServiceStop {
ServiceStop
}
No arguments.
Response
200 OK -- application/json. No data returned on success.
{ "data": { "ServiceStop": null } }
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
mutation ServiceStop {
ServiceStop
}
Response
Status: 200 OK
{
"data": {
"ServiceStop": null
}
}
Get Security and Authentication Settings
POST {{edgeUrl}}/opcua/v2
Get Security and Authentication Settings
Returns the OPC UA server's enabled security modes, security policies, and authentication modes -- the surface external clients negotiate against when connecting.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
query GetConnectionSettings {
GetConnectionSettings {
EnabledSecurityModes
EnabledSecurityPolicies
EnabledAuthModes
}
}
No arguments.
Response
200 OK -- application/json
| Field | Type | Description |
|---|---|---|
data.GetConnectionSettings.EnabledSecurityModes |
string[] | OPC UA security modes enabled: None, Sign, SignAndEncrypt. |
data.GetConnectionSettings.EnabledSecurityPolicies |
string[] | OPC UA security policies enabled: Basic128Rsa15, Basic256, Basic256Sha256, Aes128_Sha256_RsaOaep, Aes256_Sha256_RsaPss. |
data.GetConnectionSettings.EnabledAuthModes |
string[] | OPC UA user-auth modes: Anonymous, Password, Certificate. |
{
"data": {
"GetConnectionSettings": {
"EnabledSecurityModes": ["SignAndEncrypt", "Sign", "None"],
"EnabledSecurityPolicies": [
"Basic256Sha256",
"Aes256_Sha256_RsaPss",
"Basic128Rsa15",
"Aes128_Sha256_RsaOaep",
"Basic256"
],
"EnabledAuthModes": ["Certificate", "Password", "Anonymous"]
}
}
}
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
query GetConnectionSettings {
GetConnectionSettings {
EnabledSecurityModes
EnabledSecurityPolicies
EnabledAuthModes
}
}
Response
Status: 200 OK
{
"data": {
"GetConnectionSettings": {
"EnabledSecurityModes": [
"SignAndEncrypt",
"Sign",
"None"
],
"EnabledSecurityPolicies": [
"Basic256Sha256",
"Aes256_Sha256_RsaPss",
"Basic128Rsa15",
"Aes128_Sha256_RsaOaep",
"Basic256"
],
"EnabledAuthModes": [
"Certificate",
"Password",
"Anonymous"
]
}
}
}
Change Security and Authentication Settings
POST {{edgeUrl}}/opcua/v2
Change Security and Authentication Settings
Updates the OPC UA server's enabled security modes, policies, and auth modes. Takes effect on the next start/restart.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
mutation UpdateConnectionSettings($input: UpdateConnectionSettingsRequest!) {
UpdateConnectionSettings(input: $input)
}
Variables
| Field | Type | Required | Description |
|---|---|---|---|
EnabledSecurityModes |
[String!]! |
Yes | Subset of None, Sign, SignAndEncrypt. |
EnabledSecurityPolicies |
[String!]! |
Yes | Subset of Basic128Rsa15, Basic256, Basic256Sha256, Aes128_Sha256_RsaOaep, Aes256_Sha256_RsaPss. |
EnabledAuthModes |
[String!]! |
Yes | Subset of Anonymous, Password, Certificate. |
{
"input": {
"EnabledSecurityModes": ["None", "Sign", "SignAndEncrypt"],
"EnabledSecurityPolicies": [
"Basic256Sha256",
"Basic256",
"Basic128Rsa15",
"Aes128_Sha256_RsaOaep",
"Aes256_Sha256_RsaPss"
],
"EnabledAuthModes": ["Anonymous", "Password", "Certificate"]
}
}
Response
200 OK -- application/json. No data returned on success.
{ "data": { "UpdateConnectionSettings": null } }
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
Security recommendations
- Production: disable
Nonesecurity mode andAnonymousauth. - Pilot / testing: leave them on for ease of access.
Basic128Rsa15is deprecated in newer OPC UA stacks; remove unless you have legacy clients that require it.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
mutation UpdateConnectionSettings($input: UpdateConnectionSettingsRequest!) {
UpdateConnectionSettings(input: $input)
}
Variables
{
"input": {
"EnabledSecurityModes": [
"None",
"Sign",
"SignAndEncrypt"
],
"EnabledSecurityPolicies": [
"Basic256Sha256",
"Basic256",
"Basic128Rsa15",
"Aes128_Sha256_RsaOaep",
"Aes256_Sha256_RsaPss"
],
"EnabledAuthModes": [
"Anonymous",
"Certificate",
"Password"
]
}
}
Response
Status: 200 OK
{
"data": {
"UpdateConnectionSettings": null
}
}
Download Server Logs
POST {{edgeUrl}}/opcua/v2
Download Server Logs
Returns the OPC UA server's log file as a base64-encoded blob in data.DownloadServerLog. Decode client-side to read the text. Use this for support tickets or local diagnostics.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
query DownloadServerLog {
DownloadServerLog
}
No arguments.
Response
200 OK -- application/json
| Field | Type | Description |
|---|---|---|
data.DownloadServerLog |
string | Base64-encoded log file contents. Decode to recover the plaintext log. |
{
"data": {
"DownloadServerLog": "WzIwMjQtMDctMzEgMTA6NDE6MTQuMTI5XSBbc2VydmljZV0gW2luZm9d..."
}
}
To decode (example with Python):
import base64
plain = base64.b64decode(resp["data"]["DownloadServerLog"]).decode("utf-8")
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
query DownloadServerLog {
DownloadServerLog
}
Response
Status: 200 OK
{
"data": {
"DownloadServerLog": "WzIwMjQtMDctMzEgMTA6NDE6MTQuMTI5XSBbc2VydmljZV0gW2luZm9dIGxvYWRpbmcgY29uZmlndXJhdGlvbgpbMjAyNC0wNy0zMSAxMDo0MToxNC4xOTNdIFtzZXJ2aWNlXSBbaW5mb10gc3RhcnRpbmcgc2VydmVyIHdpdGggY29uZmlnIGZpbGUgL3RtcC9jb25maWdfZmlsZS5pbmkKWzIwMjQtMDctMzEgMTA6NDE6MTQuMjE1XSBbc2VydmljZV0gW2luZm9dIGluaXRpYWxpemUKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBTZXJ2ZXIgb3BlbmVkIGVuZHBvaW50cyBmb3IgZm9sbG93aW5nIFVSTHM6CiAgICAgb3BjLnRjcDovLzEwLjMwLjUwLjE6NDg0MAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKWzIwMjQtMDctMzEgMTA6NDE6MTUuMTg2XSBbc2VydmljZV0gW2luZm9dIHN0YXJ0aW5nIGhlYXJ0YmVhdCBwcm9jZXNzaW5nIGZvciAxMjcuMC4wLjE6OTA5MyBlbmRwb2ludApbMjAyNC0wNy0zMSAxMDo0MToxNi4wOTVdIFtzZXJ2aWNlXSBbaW5mb10gZmluaXNoZWQuClsyMDI0LTA3LTMxIDEwOjQyOjAzLjc3OF0gW3NlcnZpY2VdIFtpbmZvXSBsb2FkaW5nIGNvbmZpZ3VyYXRpb24KWzIwMjQtMDctMzEgMTA6NDI6MDMuODAwXSBbc2VydmljZV0gW2luZm9dIHN0YXJ0aW5nIHNlcnZlciB3aXRoIGNvbmZpZyBmaWxlIC90bXAvY29uZmlnX2ZpbGUuaW5pClsyMDI0LTA3LTMxIDEwOjQyOjAzLjgwMF0gW3NlcnZpY2VdIFtpbmZvXSBpbml0aWFsaXplCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogU2VydmVyIG9wZW5lZCBlbmRwb2ludHMgZm9yIGZvbGxvd2luZyBVUkxzOgogICAgIG9wYy50Y3A6Ly8xMC4zMC41MC4xOjQ4NDAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqClsyMDI0LTA3LTMxIDEwOjQyOjA0Ljc5OV0gW3NlcnZpY2VdIFtpbmZvXSBzdGFydGluZyBoZWFydGJlYXQgcHJvY2Vzc2luZyBmb3IgMTI3LjAuMC4xOjkwOTMgZW5kcG9pbnQKWzIwMjQtMDctMzEgMTA6NDI6MzkuODQ2XSBbc2VydmljZV0gW2luZm9dIGZpbmlzaGVkLgo="
}
}
List Users
POST {{edgeUrl}}/opcua/v2
List Users
Returns every OPC UA-level user provisioned on the server. These are the credentials external OPC UA clients use to authenticate when the server is configured with Password auth -- separate from the LE API token.
Endpoint
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
query ListUsers {
ListUsers {
Disabled
Password
Username
}
}
No arguments.
Response
200 OK -- application/json
| Field | Type | Description |
|---|---|---|
data.ListUsers[].Username |
string | User name. |
data.ListUsers[].Password |
string | null |
data.ListUsers[].Disabled |
boolean | true if the account is disabled. |
{
"data": {
"ListUsers": [
{ "Disabled": false, "Password": null, "Username": "apiOPCusername" }
]
}
}
Note: user creation is performed via the LE UI's OPC UA admin page rather than a dedicated mutation on this surface. Once created, use
Update Userto change the disabled flag.
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
query ListUsers {
ListUsers {
Disabled
Password
Username
}
}
Response
Status: 200 OK
{
"data": {
"ListUsers": [
{
"Disabled": false,
"Password": null,
"Username": "apiOPCusername"
}
]
}
}
Update User
POST {{edgeUrl}}/opcua/v2
Update User
Updates an OPC UA-level user's state. The exposed fields here are Username (the selector) and Disabled (the enable/disable toggle). Password rotation is handled via the LE UI's OPC UA admin page.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
mutation UpdateUser($input: UserRequest!) {
UpdateUser(input: $input)
}
Variables
| Field | Type | Required | Description |
|---|---|---|---|
Username |
String! |
Yes | User to update. |
Disabled |
Boolean! |
Yes | true to disable, false to enable. |
{
"input": {
"Username": "{{opc_username}}",
"Disabled": false
}
}
Response
200 OK -- application/json. No data returned on success.
{ "data": { "UpdateUser": null } }
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
mutation UpdateUser($input: UserRequest!) {
UpdateUser(input: $input)
}
Variables
{
"input": {
"Username": "{{opc_username}}",
"Disabled": false
}
}
Response
Status: 200 OK
{
"data": {
"UpdateUser": null
}
}
Delete User
POST {{edgeUrl}}/opcua/v2
Delete User
Deletes an OPC UA-level user. External clients that connect with the deleted credentials will fail on the next session establishment.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
mutation DeleteUser($username: String!) {
DeleteUser(username: $username)
}
Variables
| Field | Type | Required | Description |
|---|---|---|---|
username |
String! |
Yes | User name to delete. |
{ "username": "{{opc_username}}" }
Response
200 OK -- application/json. No data returned on success.
{ "data": { "DeleteUser": null } }
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
mutation DeleteUser($username: String!) {
DeleteUser(username: $username)
}
Variables
{
"username": "{{opc_username}}"
}
Response
Status: 200 OK
{
"data": {
"DeleteUser": null
}
}
Bulk Update Tag Access Control
POST {{edgeUrl}}/opcua/v2
Bulk Update Tag Access Control
New in 4.1.x.
New in 4.1.x. Set the OPC UA AccessControl permission on every tag under a node in one call.
AccessControl: Read | Write | ReadWrite. Scope: DirectChildren | IncludeSubfolders.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request Body
GraphQL Query
mutation BulkUpdateTagAccessControl($input: BulkUpdateTagAccessControlRequest!) {
BulkUpdateTagAccessControl(input: $input) {
UpdatedCount SkippedCount
Errors { NodeID Message }
}
}
Variables
{
"input": {
"NodeID": "{{opc_node_id}}",
"AccessControl": "ReadWrite",
"Scope": "IncludeSubfolders"
}
}
Get Server Settings
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. All OPC UA server configuration parameters as a flat list.
Section groups related parameters for display. ReadOnly parameters are reported for visibility but are rejected by UpdateServerSettings.
Request Body
GraphQL Query
query GetServerSettings {
GetServerSettings {
Parameter
DisplayName
Value
Section
ReadOnly
}
}
Update Server Settings
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Set one or more server parameters in a single call. Send only the parameters you want to change; anything omitted is left alone.
Read the available parameter names from GetServerSettings first. Parameters marked ReadOnly cannot be set.
Request Body
GraphQL Query
mutation UpdateServerSettings($input: UpdateServerSettingsRequest!) {
UpdateServerSettings(input: $input)
}
Variables
{
"input": {
"Settings": [
{
"Parameter": "{{opc_setting_parameter}}",
"Value": "{{opc_setting_value}}"
}
]
}
}
Create User
POST {{edgeUrl}}/opcua/v2
Create User
Creates a user that OPC UA clients can sign in with (username and password authentication on the OPC UA server). These users are separate from LE platform users. The server generates the password and returns it once, in this response only: List Users reports Password as null afterwards. Store it before you discard the response.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
mutation CreateUser($input: UserRequest!) {
CreateUser(input: $input) {
Username
Disabled
Password
}
}
Variables (input: UserRequest!)
| Field | Type | Required | Description |
|---|---|---|---|
Username |
String! |
Yes | Name the OPC UA client signs in with. Must not be empty. |
Disabled |
Boolean! |
Yes | true creates the user disabled. |
{
"input": {
"Username": "{{opc_username}}",
"Disabled": false
}
}
There is no password field: the password is always generated (12 characters).
Response
200 OK -- application/json. data.CreateUser is the new User, with the generated Password in clear text.
{
"data": {
"CreateUser": {
"Username": "opcclient1",
"Disabled": false,
"Password": "<generated>"
}
}
}
Calling CreateUser again with an existing Username does not fail: it returns the user with a new generated password, and the old password stops working. Use Update User to enable or disable a user without changing its password.
An empty Username returns username is required.
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
mutation CreateUser($input: UserRequest!) {
CreateUser(input: $input) {
Username
Disabled
Password
}
}
Variables
{
"input": {
"Username": "{{opc_username}}",
"Disabled": false
}
}
Response
Status: 200 OK
{
"data": {
"CreateUser": {
"Username": "apidocs-backfill-opc",
"Disabled": false,
"Password": "<generated>"
}
}
}
Subscribe Service State
POST {{edgeUrl}}/opcua/v2
Subscribe Service State
Streams the state of the OPC UA server. The first message is the current state, sent as soon as the subscription starts; a new message follows when the state changes, for example after Start OPC UA Service or Stop OPC UA Service. This is what the OPC UA page in the LE UI uses for its running / stopped indicator.
Endpoint
wss://{{edgeHost}}/opcua/v2
WebSocket subscription. Both the graphql-transport-ws and the legacy graphql-ws subprotocols are accepted. Send the API token as Authorization: Basic <base64(token:)> on the upgrade request or in the connection_init payload. A plain HTTP POST does not stream; convert this item to a Postman WebSocket request after import.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
subscription SubscribeState {
SubscribeState {
ServiceState
ProcessState
}
}
No variables.
Messages
Each next message carries a State:
| Field | Type | Values |
|---|---|---|
ServiceState |
ServiceStateEnum |
OK (enabled) or STOPPED (disabled). |
ProcessState |
ProcStateEnum |
OK when the server process is running, FAILED otherwise. |
A stopped server reports ProcessState: FAILED as well, so read ServiceState first: STOPPED + FAILED is a server that was stopped on purpose, OK + FAILED is a server that should be running but is not.
{
"id": "1",
"type": "next",
"payload": {
"data": {
"SubscribeState": {
"ServiceState": "STOPPED",
"ProcessState": "FAILED"
}
}
}
}
Errors
A bad token fails the WebSocket upgrade (HTTP 401). Errors after the subscription starts arrive as an error message for the subscription id, with the same errors array GraphQL uses over HTTP.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
subscription SubscribeState {
SubscribeState {
ServiceState
ProcessState
}
}
Response
Status: 200 OK
{
"data": {
"SubscribeState": {
"ServiceState": "STOPPED",
"ProcessState": "FAILED"
}
}
}
Subscribe Server Log
POST {{edgeUrl}}/opcua/v2
Subscribe Server Log
Tails the OPC UA server log. The first message carries the log lines the server has already written; each later message carries the lines written since. It is the live counterpart of Download Server Logs, and what the log viewer on the OPC UA page in the LE UI uses.
Endpoint
wss://{{edgeHost}}/opcua/v2
WebSocket subscription. Both the graphql-transport-ws and the legacy graphql-ws subprotocols are accepted. Send the API token as Authorization: Basic <base64(token:)> on the upgrade request or in the connection_init payload. A plain HTTP POST does not stream; convert this item to a Postman WebSocket request after import.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
subscription AttachServerLog {
AttachServerLog {
Lines
}
}
No variables.
Messages
Each next message carries a LogEvent with Lines: [String!]!. Every entry is one raw log line including its trailing \n, in the form [<timestamp>] [service] [<level>] <message>. Banner lines from the OPC UA stack (for example the list of opened endpoints) have no prefix.
{
"id": "1",
"type": "next",
"payload": {
"data": {
"AttachServerLog": {
"Lines": [
"[2026-10-09 01:41:05.242] [service] [info] loading configuration\n",
"[2026-10-09 01:41:05.244] [service] [info] starting server with config file /tmp/config_file.ini\n",
" Server opened endpoints for following URLs:\n",
" opc.tcp://0.0.0.0:4850\n"
]
}
}
}
}
If the server has never run since the log was cleared, the subscription stays open without sending anything.
Errors
A bad token fails the WebSocket upgrade (HTTP 401). Errors after the subscription starts arrive as an error message for the subscription id, with the same errors array GraphQL uses over HTTP.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
subscription AttachServerLog {
AttachServerLog {
Lines
}
}
Response
Status: 200 OK
{
"data": {
"AttachServerLog": {
"Lines": [
"[2026-10-09 01:41:05.242] [service] [info] loading configuration\n",
"[2026-10-09 01:41:05.244] [service] [info] starting server with config file /tmp/config_file.ini\n",
"[2026-10-09 01:41:05.249] [service] [info] initialize\n",
"***************************************************\n",
" Server opened endpoints for following URLs:\n",
" opc.tcp://0.0.0.0:4850\n",
"***************************************************\n",
"[2026-10-09 01:41:05.958] [service] [info] finished.\n"
]
}
}
}
Get Server Metrics
POST {{edgeUrl}}/opcua/v2
Get Server Metrics
Returns the server's live session counters: how many external OPC UA clients are currently connected, with their session IDs, session names, and client application names.
Use this to confirm an external client has established a session after configuration changes, or to render a "Connected clients" tile.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
query GetServerMetrics {
GetServerMetrics {
ActiveSessionsCount
ActiveSessions {
ID
Name
ClientName
}
}
}
No arguments.
Response
200 OK -- application/json
| Field | Type | Description |
|---|---|---|
data.GetServerMetrics.ActiveSessionsCount |
integer | Number of currently established sessions. |
data.GetServerMetrics.ActiveSessions |
object[] | One entry per active session. |
data.GetServerMetrics.ActiveSessions[].ID |
string | Session UUID. |
data.GetServerMetrics.ActiveSessions[].Name |
string | Session display name. |
data.GetServerMetrics.ActiveSessions[].ClientName |
string | Client-supplied application name (e.g. UaExpert, B&R Automation Studio). |
{
"data": {
"GetServerMetrics": {
"ActiveSessionsCount": 0,
"ActiveSessions": []
}
}
}
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
query GetServerMetrics {
GetServerMetrics {
ActiveSessionsCount
ActiveSessions {
ID
Name
ClientName
}
}
}
Response
Status: 200 OK
{
"data": {
"GetServerMetrics": {
"ActiveSessionsCount": 0,
"ActiveSessions": []
}
}
}
Download Server Certificates
POST {{edgeUrl}}/opcua/v2
Download Server Certificates
Returns the OPC UA server's self-signed server certificate as a base64-encoded DER blob in data.GetServerCertificate. Save this to disk and import it into your OPC UA client's trust store to enable Sign or SignAndEncrypt security modes.
For end-entity certificate trust, also import the issuing CA if required by your client.
Endpoint
POST {{edgeUrl}}/opcua/v2
Content-Type: application/json
The operation is chosen by the GraphQL query body, not the URL path.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
query GetServerCertificate {
GetServerCertificate
}
No arguments.
Response
200 OK -- application/json
| Field | Type | Description |
|---|---|---|
data.GetServerCertificate |
string | Base64-encoded DER certificate. Decode and write to a .der (or convert to PEM) for client trust stores. |
{
"data": {
"GetServerCertificate": "MIIFrDCCBJSgAwIBAgIE..."
}
}
Saving the certificate
import base64
with open("server.der", "wb") as f:
f.write(base64.b64decode(resp["data"]["GetServerCertificate"]))
Convert DER to PEM with openssl x509 -inform der -in server.der -out server.pem.
Errors
GraphQL endpoints return 200 OK even on logical errors. Inspect the errors array in the response body:
{ "errors": [ { "message": "...", "path": ["..."], "extensions": { "code": "..." } } ] }
extensions.code |
Meaning |
|---|---|
UNAUTHENTICATED |
Missing or invalid API token. |
FORBIDDEN |
Token lacks permission for this operation. |
BAD_USER_INPUT |
Invalid argument (wrong type, missing required field, malformed UUID, unknown ID, etc.). |
NOT_FOUND |
The targeted entity does not exist. |
INTERNAL_SERVER_ERROR |
DeviceHub fault. Retry, then escalate via System > Support. |
A non-200 HTTP response means DeviceHub itself is unreachable. See Dashboard > DeviceHub Status.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
query GetServerCertificate {
GetServerCertificate
}
Response
Status: 200 OK
{
"data": {
"GetServerCertificate": "MIIFrDCCBJSgAwIBAgIEZqp3OjANBgkqhkiG9w0BAQsFADCBpDEoMCYGCgmSJomT8ixkARkWGGxpdG11cy1lZGdlLTAwNTA1NmI5YWZkMzELMAkGA1UEBhMCVVMxFTATBgNVBAcMDExvY2F0aW9uTmFtZTEVMBMGA1UECgwMT3JnYW5pemF0aW9uMQ0wCwYDVQQLDARVbml0MS4wLAYDVQQDDCVvcGN1YV93b3JrZXJAbGl0bXVzLWVkZ2UtMDA1MDU2YjlhZmQzMB4XDTI0MDczMTE3NDExNFoXDTI5MDczMDE3NDExNFowgaQxKDAmBgoJkiaJk/IsZAEZFhhsaXRtdXMtZWRnZS0wMDUwNTZiOWFmZDMxCzAJBgNVBAYTAlVTMRUwEwYDVQQHDAxMb2NhdGlvbk5hbWUxFTATBgNVBAoMDE9yZ2FuaXphdGlvbjENMAsGA1UECwwEVW5pdDEuMCwGA1UEAwwlb3BjdWFfd29ya2VyQGxpdG11cy1lZGdlLTAwNTA1NmI5YWZkMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALFSV5egpaXXakJHhtNnhPgG9OjiFYygtpVQwnpSnhDjUPl/gk4A0t7u1Jwa39YdMkflmZ6baip9TgSz5391jqzEHsA4d0f0BHF7qH70RoKJA4IugMbVRG20Sq/85/ZV5teL7KfoGpHnNVLMGrpQaPAbeyh3lytIaqsYSSd94+yKA63I16FotoYICH/0glG2Aqx4v3ujEgaSTDvZ+oYcs9qV/5yhurb59XoLCUnT9haMFvFkgADPR52IhLimuNUcT/+oOX51VMawk1aoDT49m2KN6TZBKM0rn9nU7RuGgSQ6Z47s0uCEJdSsdOLQboJRH9tThz5zRPruVPH2KHRLpM0CAwEAAaOCAeIwggHeMBIGA1UdEwEB/wQIMAYBAf8CAQAwUAYJYIZIAYb4QgENBEMWQSJHZW5lcmF0ZWQgd2l0aCBVbmlmaWVkIEF1dG9tYXRpb24gVUEgQmFzZSBMaWJyYXJ5IHVzaW5nIE9wZW5TU0wiMB0GA1UdDgQWBBRsjLQFZ7mfRHgUpigHRAQ3BGG0rDCB1AYDVR0jBIHMMIHJgBRsjLQFZ7mfRHgUpigHRAQ3BGG0rKGBqqSBpzCBpDEoMCYGCgmSJomT8ixkARkWGGxpdG11cy1lZGdlLTAwNTA1NmI5YWZkMzELMAkGA1UEBhMCVVMxFTATBgNVBAcMDExvY2F0aW9uTmFtZTEVMBMGA1UECgwMT3JnYW5pemF0aW9uMQ0wCwYDVQQLDARVbml0MS4wLAYDVQQDDCVvcGN1YV93b3JrZXJAbGl0bXVzLWVkZ2UtMDA1MDU2YjlhZmQzggRmqnc6MA4GA1UdDwEB/wQEAwIC9DAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwTgYDVR0RBEcwRYYpdXJuOmxpdG11cy1lZGdlLTAwNTA1NmI5YWZkMzpvcGN1YV93b3JrZXKCGGxpdG11cy1lZGdlLTAwNTA1NmI5YWZkMzANBgkqhkiG9w0BAQsFAAOCAQEAj0BAOyvaa6rMJhRFp1YUPoTa0/NsBJtaIwKJit2gE8ZRf9YW2gkk/FiGohltcDjCn91cBOoi9qQbzbzQsZ2siF3RZOhSSyUQRT3JfLxZ7RZv0ogNiYzL2gtlysBqZGJFoIYTWHqj9NHlmCCovywbcCsv/qXb4CHfTtrGnsig9+eS42xT28oe/ZToQITAQx97R+sUVqJ4RHyHRyENMHhW4GSz0eVnXXrtve1ITVki5CvzdVDCstfPRrMQUoDGNma7DAf6P0xF9A12ai0IfATyTgWaiCfInZEqCOLd0IRZ6dEfeEMbomoTRHf6n02Qqas/Gq50d4seUzVLnHbnJb6sug=="
}
}
Subscribe Certificate List
POST {{edgeUrl}}/opcua/v2
Subscribe Certificate List
Streams the list of OPC UA client certificates the server knows about: the certificates clients presented when connecting with a signed or encrypted security policy, and whether each one is trusted. The first message is the current list, sent as soon as the subscription starts; a new message carries the whole list again when it changes. This backs the client certificates table on the OPC UA page in the LE UI.
Endpoint
wss://{{edgeHost}}/opcua/v2
WebSocket subscription. Both the graphql-transport-ws and the legacy graphql-ws subprotocols are accepted. Send the API token as Authorization: Basic <base64(token:)> on the upgrade request or in the connection_init payload. A plain HTTP POST does not stream; convert this item to a Postman WebSocket request after import.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request body
subscription SubscribeCertificateList {
SubscribeCertificateList {
ID
Trusted
CAVerified
Fields
}
}
No variables.
Messages
Each next message carries [Certificate!], the full list (not a delta):
| Field | Type | Description |
|---|---|---|
ID |
CertID! |
Certificate identifier. |
Trusted |
Boolean! |
true once the certificate has been trusted on the server. |
CAVerified |
Boolean! |
Whether the certificate was verified against a CA. |
Fields |
Any |
Certificate details as free-form JSON. |
A server that no client has connected to with a certificate sends an empty list:
{
"id": "1",
"type": "next",
"payload": {
"data": {
"SubscribeCertificateList": []
}
}
}
Errors
A bad token fails the WebSocket upgrade (HTTP 401). Errors after the subscription starts arrive as an error message for the subscription id, with the same errors array GraphQL uses over HTTP.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
GraphQL Query
subscription SubscribeCertificateList {
SubscribeCertificateList {
ID
Trusted
CAVerified
Fields
}
}
Response
Status: 200 OK
{
"data": {
"SubscribeCertificateList": []
}
}
Subscribe Server Metrics
POST {{edgeUrl}}/opcua/v2
Subscribe Server Metrics
Present on 4.0.x and 4.1.x; previously undocumented. WebSocket subscription: run over graphql-transport-ws at
wss://{{edgeHost}}/opcua/v2; a plain HTTP POST will not stream.
WebSocket subscription. Same shape as GetServerMetrics. Convert to a WS request after import (URL: wss://.../opcua/v2).
Authentication
HTTP Basic Auth. Username is your API token, password is empty. The same token is valid across /devicehub/v2, /analytics/v2, /cc, /opcua, and the other LE services.
Request Body
GraphQL Query
subscription SubscribeServerMetrics {
SubscribeServerMetrics {
ActiveSessionsCount
ActiveSessions { ID Name ClientName }
}
}
OPC UA Prometheus Metrics
GET {{edgeUrl}}/opcua/metrics
OPC UA Prometheus Metrics
Returns OPC UA server metrics in the Prometheus exposition format, for direct Prometheus scraping. The DeviceHub, DataHub, Analytics and Integration services expose the same kind of endpoint.
Endpoint
GET {{edgeUrl}}/opcua/metrics
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
None.
Response
200 OK -- text/plain. Standard Prometheus exposition. Every series carries the label name="server", and the # HELP lines are empty, so the table below describes each metric by its name.
| Metric | Type | Description |
|---|---|---|
edge_opcua_worker_up |
gauge | Whether the OPC UA server worker is up (1) or not (0). |
edge_opcua_sessions |
gauge | Open client sessions. |
edge_opcua_monitored_items |
gauge | Monitored items across all client subscriptions. |
edge_opcua_read_requests |
counter | Read requests served. |
edge_opcua_read_bytes |
counter | Bytes handled by read requests. |
edge_opcua_write_requests |
counter | Write requests served. |
edge_opcua_write_bytes |
counter | Bytes handled by write requests. |
# HELP edge_opcua_sessions
# TYPE edge_opcua_sessions gauge
edge_opcua_sessions{name="server"} 0
# HELP edge_opcua_worker_up
# TYPE edge_opcua_worker_up gauge
edge_opcua_worker_up{name="server"} 0
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
Response
Status: 200 OK
# HELP edge_opcua_monitored_items
# TYPE edge_opcua_monitored_items gauge
edge_opcua_monitored_items{name="server"} 0
# HELP edge_opcua_read_bytes
# TYPE edge_opcua_read_bytes counter
edge_opcua_read_bytes{name="server"} 0
# HELP edge_opcua_read_requests
# TYPE edge_opcua_read_requests counter
edge_opcua_read_requests{name="server"} 0
# HELP edge_opcua_sessions
# TYPE edge_opcua_sessions gauge
edge_opcua_sessions{name="server"} 0
# HELP edge_opcua_worker_up
# TYPE edge_opcua_worker_up gauge
edge_opcua_worker_up{name="server"} 0
# HELP edge_opcua_write_bytes
# TYPE edge_opcua_write_bytes counter
edge_opcua_write_bytes{name="server"} 0
# HELP edge_opcua_write_requests
# TYPE edge_opcua_write_requests counter
edge_opcua_write_requests{name="server"} 0
Subscribe Tree Changed
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Streams hierarchy changes as they happen, so a UI can update incrementally instead of re-reading the tree.
Type is ADDED | REMOVED | UPDATED. AfterID gives the sibling the node now follows, which is what you need to place it correctly in an ordered list. OriginID echoes the originId passed to the mutation that caused the change, so a client can skip events it caused itself.
Bulk changes do not arrive as per-node events. A staged commit or hierarchy upload surfaces as a jump in the tree version rather than one event per affected node. Detect the gap against GetTreeStateVersion and re-read the affected subtree instead of rebuilding it from the event stream.
WebSocket subscription. Convert to a Postman WebSocket request after import (URL: wss://.../opcua/v2).
Request Body
GraphQL Query
subscription SubscribeTreeChanged {
SubscribeTreeChanged {
Type
NodeID
ParentID
Version
OriginID
AfterID
Node { NodeID Name NodeType SyncState Version }
}
}
Subscribe Node State Changed
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Streams per-node sync state transitions.
State is synced | pending | failed | restart_required. ErrorReason is populated on failed. Use it to show which tags are actually live on the worker rather than merely configured.
WebSocket subscription. Convert to a Postman WebSocket request after import (URL: wss://.../opcua/v2).
Request Body
GraphQL Query
subscription SubscribeNodeStateChanged {
SubscribeNodeStateChanged {
NodeID
WorkerNodeID
State
ErrorReason
}
}
Subscribe Sync Status
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Streams progress of the running sync, the same SyncStatus shape GetSyncStatus returns. Preferable to polling for a long-running sync.
WebSocket subscription. Convert to a Postman WebSocket request after import (URL: wss://.../opcua/v2).
Request Body
GraphQL Query
subscription SubscribeSyncStatus {
SubscribeSyncStatus {
SyncID
State
TotalCount
AppliedCount
FailedCount
Failures { NodeID ErrorReason }
StartedAt
FinishedAt
AppliedAtNextWorkerStart
OriginID
}
}
Get Folder Items (paged)
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Cursor-paged listing of the tag children directly under a node. Folder and device children are not included; use GetChildFolders or GetChildFoldersPage for those.
Page by passing the previous response's NextCursor back as Cursor. HasMore is false on the last page. Limit defaults to 1000.
Prefer this over fetching the whole tree when a hierarchy is large.
Request Body
GraphQL Query
query GetFolderItems($input: GetFolderItemsRequest!) {
GetFolderItems(input: $input) {
Items { NodeID ParentID Name NodeType NodeSource
Path WorkerNodeID WorkerNodeIDMode ArrayLength AccessControl
Version SyncState SyncFailureReason HasChildren }
NextCursor
HasMore
}
}
Variables
{
"input": {
"NodeID": "{{opc_node_id}}",
"Limit": 1000,
"Cursor": null
}
}
Get Child Folders
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. The folder and device children of a node, tags excluded, unpaged. Use it to build a navigation tree without pulling tag nodes.
Still subject to the server child-window cap, so for large folders use GetChildFoldersPage.
For large folders use GetChildFoldersPage instead.
Request Body
GraphQL Query
query GetChildFolders($input: NodeID!) {
GetChildFolders(input: $input) { NodeID ParentID Name NodeType NodeSource
Path WorkerNodeID WorkerNodeIDMode ArrayLength AccessControl
Version SyncState SyncFailureReason HasChildren }
}
Variables
{
"input": "{{opc_node_id}}"
}
Get Child Folders (paged)
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Cursor-paged form of GetChildFolders. Same paging contract as GetFolderItems: feed NextCursor back as Cursor until HasMore is false.
Request Body
GraphQL Query
query GetChildFoldersPage($input: GetFolderItemsRequest!) {
GetChildFoldersPage(input: $input) {
Items { NodeID ParentID Name NodeType NodeSource
Path WorkerNodeID WorkerNodeIDMode ArrayLength AccessControl
Version SyncState SyncFailureReason HasChildren }
NextCursor
HasMore
}
}
Variables
{
"input": {
"NodeID": "{{opc_node_id}}",
"Limit": 1000,
"Cursor": null
}
}
Get Folder Skeleton
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. A flat, paged list of every folder and device node in the hierarchy, with no tag nodes. Intended for building the whole tree structure up front, then loading each folder's tags on demand with GetFolderItems.
Request Body
GraphQL Query
query GetFolderSkeleton($input: FolderSkeletonRequest) {
GetFolderSkeleton(input: $input) {
Items { NodeID ParentID Name NodeType NodeSource
Path WorkerNodeID WorkerNodeIDMode ArrayLength AccessControl
Version SyncState SyncFailureReason HasChildren }
NextCursor
HasMore
}
}
Variables
{
"input": {
"Limit": 1000,
"Cursor": null
}
}
Get Nodes by Ref
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Fetch one node by NodeRef, which is the pair (ID, ParentID) rather than an ID alone.
A ref disambiguates nodes whose IDs collide across the tree. The same ref shape is what UpdateNodeByRef and DeleteNodeByRef take.
This replaces GetNodes, which is deprecated in 4.2.x for exactly that ambiguity. GetNodes still works.
Request Body
GraphQL Query
query GetNodesByRef($input: NodeRef!) {
GetNodesByRef(input: $input) { NodeID ParentID Name NodeType NodeSource
Path WorkerNodeID WorkerNodeIDMode ArrayLength AccessControl
Version SyncState SyncFailureReason HasChildren }
}
Variables
{
"input": {
"ID": "{{opc_node_id}}",
"ParentID": "{{opc_parent_id}}"
}
}
Search Nodes
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Search the hierarchy by name substring.
| Field | Meaning |
|---|---|
Query |
Required. Name substring to match. |
ScopeNodeID |
Optional. Limit the search to one subtree. |
NodeType |
Optional. FOLDER | DEVICE | TAG. |
DataType |
Optional. Filter tags by data type, e.g. float. |
Cursor / Limit |
Paging. Limit defaults to 1000. |
Each match carries the node plus its full Path from the root.
Request Body
GraphQL Query
query SearchNodes($input: SearchNodesRequest!) {
SearchNodes(input: $input) {
Matches {
Node { NodeID ParentID Name NodeType Version SyncState }
Path
}
NextCursor
HasMore
}
}
Variables
{
"input": {
"Query": "temperature",
"ScopeNodeID": "{{opc_node_id}}",
"NodeType": "TAG",
"DataType": "float",
"Cursor": null,
"Limit": 1000
}
}
Get Tree State Version
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. The monotonic version stamp of the whole hierarchy, bumped on every committed mutation.
Poll it to detect that something changed without re-reading the tree, or capture it before a batch of edits to confirm nothing else moved in between. For live updates prefer SubscribeTreeChanged.
Request Body
GraphQL Query
query GetTreeStateVersion {
GetTreeStateVersion { Version }
}
Stage Hierarchy
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Step 1 of the two-phase bulk hierarchy upload.
Validates the payload and returns a StagingID plus a preview of the effect: how many nodes would be Added, Removed and Modified. Nothing is applied yet.
Show the counts to the operator, then call CommitStagedHierarchy to apply or CancelStagedHierarchy to discard. The staging expires at ExpiresAt.
input is Any!, the same free-form hierarchy document UploadHierarchy accepts.
Request Body
GraphQL Query
mutation StageHierarchy($input: Any!) {
StageHierarchy(input: $input) {
StagingID
Added
Removed
Modified
ExpiresAt
}
}
Variables
{
"input": {
"nodes": [
{
"ParentID": "edgedevice",
"Name": "apiFolder",
"NodeType": "FOLDER"
},
{
"ParentID": "edgedevice.apiFolder",
"Name": "apiTag",
"NodeType": "TAG",
"Data": {
"TopicName": "devicehub.topic",
"DataType": "float"
}
}
]
}
}
Commit Staged Hierarchy
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Step 2: apply a hierarchy staged by StageHierarchy.
Returns the counts actually applied. RestartRequired is the number of nodes whose change cannot take effect until the OPC UA server restarts; when it is above zero, those nodes report SyncState: restart_required.
Fails if the staging has already expired.
Request Body
GraphQL Query
mutation CommitStagedHierarchy($stagingId: ID!, $originId: String) {
CommitStagedHierarchy(stagingId: $stagingId, originId: $originId) {
Added
Removed
Modified
RestartRequired
}
}
Variables
{
"stagingId": "{{opc_staging_id}}",
"originId": "{{opc_origin_id}}"
}
Cancel Staged Hierarchy
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Discard a staged hierarchy without applying it. Stagings also expire on their own at the ExpiresAt returned by StageHierarchy.
Request Body
GraphQL Query
mutation CancelStagedHierarchy($stagingId: ID!) {
CancelStagedHierarchy(stagingId: $stagingId)
}
Variables
{
"stagingId": "{{opc_staging_id}}"
}
Upload Hierarchy with Result
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. One-shot bulk upload that reports what it did.
Same input as UploadHierarchy, but returns UploadHierarchyResult instead of nothing, so a client can confirm the counts without re-reading the tree. UploadHierarchy is deprecated in 4.2.x in favour of this; it still works. Use StageHierarchy + CommitStagedHierarchy instead when you want the operator to approve the change first.
Request Body
GraphQL Query
mutation UploadHierarchyWithResult($input: Any!) {
UploadHierarchyWithResult(input: $input) {
Added
Removed
Modified
RestartRequired
}
}
Variables
{
"input": {
"nodes": [
{
"ParentID": "edgedevice",
"Name": "apiFolder",
"NodeType": "FOLDER"
}
]
}
}
Sync Nodes
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Push the configured hierarchy out to the OPC UA worker nodes and return the resulting SyncStatus.
State is InProgress | Synced | SyncedWithErrors | Failed. When AppliedAtNextWorkerStart is true, part of the change is queued until the worker restarts. Track progress with GetSyncStatus or SubscribeSyncStatus.
Request Body
GraphQL Query
mutation SyncNodes {
SyncNodes {
SyncID
State
TotalCount
AppliedCount
FailedCount
Failures { NodeID ErrorReason }
StartedAt
FinishedAt
AppliedAtNextWorkerStart
OriginID
}
}
Get Sync Status
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. Status of one sync run by its SyncID, as returned by SyncNodes. Failures lists the nodes that could not be applied and why.
Request Body
GraphQL Query
query GetSyncStatus($syncId: ID!) {
GetSyncStatus(syncId: $syncId) {
SyncID
State
TotalCount
AppliedCount
FailedCount
Failures { NodeID ErrorReason }
StartedAt
FinishedAt
AppliedAtNextWorkerStart
OriginID
}
}
Variables
{
"syncId": "{{opc_sync_id}}"
}
Get Current Sync
POST {{edgeUrl}}/opcua/v2
New in 4.2.x. The sync currently in flight if there is one, otherwise the most recent terminal sync. Use it to avoid starting a second SyncNodes while one is still running.
Because it falls back to the last completed run, a returned SyncStatus does not on its own mean a sync is in progress. Check State (InProgress vs Synced | SyncedWithErrors | Failed) rather than treating a non-null result as busy.
Request Body
GraphQL Query
query GetCurrentSync {
GetCurrentSync {
SyncID
State
TotalCount
AppliedCount
FailedCount
StartedAt
FinishedAt
}
}