# LitmusEdge 4.0.x API Documentation/OPC UA - LE, LEM, LUNS API Docs

## Get Node Root

**POST** `{{edgeUrl}}/opcua/v2`

# 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

```http
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 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.                                          |

```json
{
  "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:

```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 GetNodeRoot {
    GetNodeRoot {
        NodeID
        ParentID
        Name
        NodeType
        NodeSource
        Data {
            DataType
            TopicName
        }
        Children
        Path
        WorkerNodeID
        WorkerNodeIDMode
        ArrayLength
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "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`

# 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

```http
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 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.          |

```json
{
  "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.

```json
{
  "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:

```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 GetNodesByPath($input: GetNodeByPathRequest!) {
  GetNodesByPath(input: $input) {
        NodeID
        ParentID
        Name
        NodeType
        NodeSource
        Data {
            DataType
            TopicName
        }
        Children
        Path
        WorkerNodeID
        WorkerNodeIDMode
        ArrayLength
    }
}
```

**Variables**

```json
{
    "input": {
        "Path": [
            "NODE",
            "edgedevice"
        ]
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "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

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 via `Data.TopicName` / `Data.DataType`.

## Endpoint

```http
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 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)

```json
{
  "input": {
    "Name": "apiFolder",
    "NodeType": "FOLDER",
    "WorkerNodeIDMode": "hierarchical",
    "ParentID": "edgedevice"
  }
}
```

## Response

`200 OK` -- `application/json`. Returns the new node's UUID as a string.

```json
{
  "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:

```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
mutation CreateNode($input: NodeRequest!) {
    CreateNode(input: $input)
}

```

**Variables**

```json
{
    "input": {
        "Name": "apiFolder",
        "NodeType": "FOLDER",
        "WorkerNodeIDMode": "hierarchical",
        "ParentID": "edgedevice"
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "data": {
        "CreateNode": "1932e708-4a11-4d0e-87ac-a650bf4d7bf9"
    }
}
```

---

## Add Node - Device

**POST** `{{edgeUrl}}/opcua/v2`

# Add Node - Device

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 via `Data.TopicName` / `Data.DataType`.

## Endpoint

```http
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 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)

```json
{
  "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.

```json
{
  "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:

```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
mutation CreateNode($input: NodeRequest!) {
    CreateNode(input: $input)
}
```

**Variables**

```json
{
    "input": {
        "Name": "apiDevice",
        "NodeType": "DEVICE",
        "WorkerNodeIDMode": "hierarchical",
        "WorkerNodeID": null,
        "ParentID": "edgedevice"
  }
}
```

### Response

**Status**: 200 OK

```json
{
    "data": {
        "CreateNode": "d508ec1b-25da-4ceb-abdd-20e4fe37f863"
    }
}
```

---

## Add Node - Tag

**POST** `{{edgeUrl}}/opcua/v2`

# Add Node - Tag

Creates a new TAG node bound to a DeviceHub topic. TAGs are leaf nodes -- external OPC UA clients can read (and, if writable, write) their value, which is routed to the underlying topic.

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 via `Data.TopicName` / `Data.DataType`.

## Endpoint

```http
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 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)

```json
{
  "input": {
    "Name": "apiTag",
    "NodeType": "TAG",
    "WorkerNodeIDMode": "hierarchical",
    "WorkerNodeID": null,
    "Data": {
      "TopicName": "devicehub.topic",
      "DataType": "float"
    },
    "ParentID": "edgedevice"
  }
}
```

## Response

`200 OK` -- `application/json`. Returns the new node's UUID as a string.

```json
{
  "data": {
    "CreateNode": "57983531-6e61-418c-aeeb-987a0d85c969"
  }
}
```

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:

```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
mutation CreateNode($input: NodeRequest!) {
    CreateNode(input: $input)
}
```

**Variables**

```json
{
    "input": {
        "Name": "apiTag",
        "NodeType": "TAG",
        "WorkerNodeIDMode": "hierarchical",
        "WorkerNodeID": null,
        "Data": {
            "TopicName": "devicehub.topic",
            "DataType": "float"
        },
        "ParentID": "edgedevice"
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "data": {
        "CreateNode": "57983531-6e61-418c-aeeb-987a0d85c969"
    }
}
```

---

## Update Node by ID

**POST** `{{edgeUrl}}/opcua/v2`

# Update Node by ID

Updates an existing node. The mutation is a **full replacement** of the node's fields (`Name`, `Data`, `WorkerNodeID`, etc.); pass the complete record.

`NodeType` is **not re-assignable** -- delete and recreate to change the kind.

## Endpoint

```http
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 UpdateNode($nodeID: NodeID!, $input: NodeRequest!) {
  UpdateNode(nodeID: $nodeID, input: $input)
}
```

### Variables

| Field        | Type           | Required | Description                                                                                          |
|--------------|----------------|----------|------------------------------------------------------------------------------------------------------|
| `nodeID`     | `NodeID!`      | Yes      | UUID of the node to update.                                                                          |
| `input`      | `NodeRequest!` | Yes      | New node fields. Same shape as the `Add Node` mutations.                                             |

```json
{
  "nodeID": "{{opc_node_id}}",
  "input": {
    "ParentID": "edgedevice",
    "Name": "apiTag",
    "NodeType": "TAG",
    "Data": {
      "DataType": "float",
      "TopicName": "devicehub.topic"
    },
    "WorkerNodeID": "EdgeDevice.apiTag",
    "WorkerNodeIDMode": "hierarchical"
  }
}
```

## Response

`200 OK` -- `application/json`. No data returned on success.

```json
{ "data": { "UpdateNode": null } }
```

## 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
mutation UpdateNode($nodeID: NodeID!, $input: NodeRequest!) {
    UpdateNode(nodeID: $nodeID, input: $input)
}
```

**Variables**

```json
{
    "nodeID": "{{opc_node_id}}",
    "input": {
        "ParentID": "edgedevice",
        "Name": "apiTag",
        "NodeType": "TAG",
        "Data": {
            "DataType": "float",
            "TopicName": "devicehub.topic"
        },
        "WorkerNodeID": "EdgeDevice.apiTag",
        "WorkerNodeIDMode": "hierarchical",
        "ArrayLength": null
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "data": {
        "UpdateNode": null
    }
}
```

---

## Remove Single Node by ID

**POST** `{{edgeUrl}}/opcua/v2`

# Remove Single Node by ID

Deletes a single node by UUID. Child nodes (if any) are removed as well. To delete by category instead of by ID, see `Reset Imported Hierarchy` / `Reset Manually Created Hierarchy` / `Reset All Hierarchy`.

## Endpoint

```http
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 DeleteNode($input: NodeID!) {
  DeleteNode(input: $input)
}
```

### Variables

| Field   | Type     | Required | Description                                  |
|---------|----------|----------|----------------------------------------------|
| `input` | `NodeID!`| Yes      | UUID of the node to delete.                  |

```json
{ "input": "{{opc_node_id}}" }
```

## Response

`200 OK` -- `application/json`. No data returned on success.

```json
{ "data": { "DeleteNode": null } }
```

## 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
mutation DeleteNode($input: NodeID!) {
    DeleteNode(input: $input)
}
```

**Variables**

```json
{
    "input": "{{opc_node_id}}"
}
```

### Response

**Status**: 200 OK

```json
{
    "data": {
        "DeleteNode": null
    }
}
```

---

## 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

```http
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 ResetNodes($input: NodeResetRequest!) {
  ResetNodes(input: $input)
}
```

### Variables

| Field         | Type      | Required | Description                                              |
|---------------|-----------|----------|----------------------------------------------------------|
| `SourceType`  | `String!` | Yes      | One of `Import`, `Manual`, `All`. Selects which nodes to remove. |

```json
{
  "input": { "SourceType": "Import" }
}
```

## Response

`200 OK` -- `application/json`. No data returned on success.

```json
{ "data": { "ResetNodes": null } }
```

## 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`.

### 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**

```graphql
mutation ResetNodes($input: NodeResetRequest!) {
    ResetNodes(input: $input)
}
```

**Variables**

```json
{
    "input": {
        "SourceType": "Import"
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "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

```http
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 ResetNodes($input: NodeResetRequest!) {
  ResetNodes(input: $input)
}
```

### Variables

| Field         | Type      | Required | Description                                              |
|---------------|-----------|----------|----------------------------------------------------------|
| `SourceType`  | `String!` | Yes      | One of `Import`, `Manual`, `All`. Selects which nodes to remove. |

```json
{
  "input": { "SourceType": "Manual" }
}
```

## Response

`200 OK` -- `application/json`. No data returned on success.

```json
{ "data": { "ResetNodes": null } }
```

## 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`.

### 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**

```graphql
mutation ResetNodes($input: NodeResetRequest!) {
    ResetNodes(input: $input)
}
```

**Variables**

```json
{
    "input": {
        "SourceType": "Manual"
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "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

```http
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 ResetNodes($input: NodeResetRequest!) {
  ResetNodes(input: $input)
}
```

### Variables

| Field         | Type      | Required | Description                                              |
|---------------|-----------|----------|----------------------------------------------------------|
| `SourceType`  | `String!` | Yes      | One of `Import`, `Manual`, `All`. Selects which nodes to remove. |

```json
{
  "input": { "SourceType": "All" }
}
```

## Response

`200 OK` -- `application/json`. No data returned on success.

```json
{ "data": { "ResetNodes": null } }
```

## 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`.

### 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**

```graphql
mutation ResetNodes($input: NodeResetRequest!) {
    ResetNodes(input: $input)
}
```

**Variables**

```json
{
    "input": {
        "SourceType": "All"
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "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

``` http
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

```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"
        }
    }
}
```

---

## 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 Service` followed by `Management > 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

``` http
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**

```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-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

```json
{
    "data": {
        "UploadHierarchy": null
    }
}
```

---

## Import Some DH Tags

**POST** `{{edgeUrl}}/opcua/v2`

# Import Some DH Tags

Imports a **subset** of DeviceHub tags into the OPC UA hierarchy by listing specific `(DeviceID, RegistersID[])` groups. Each register becomes a TAG node under a DEVICE node (created if it doesn't exist).

Use this when you want to expose only a curated slice of DeviceHub tags over OPC UA. For bulk imports, see `Import all DH Tags of a Device` or `Import ALL DH Tags`.

## Endpoint

```http
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 ImportSomeDeviceHubTags($input: ImportSomeDeviceTagsRequest!) {
  ImportSomeDeviceHubTags(input: $input) {
    ImportedCount
    FailedCount
    SkippedCount
  }
}
```

### Variables

| Field                       | Type            | Required | Description                                                       |
|-----------------------------|-----------------|----------|-------------------------------------------------------------------|
| `Tags`                      | `[TagGroup!]!`  | Yes      | One entry per device.                                             |
| `Tags[].DeviceID`           | `ID!`           | Yes      | DeviceHub device UUID.                                            |
| `Tags[].RegistersID`        | `[ID!]!`        | Yes      | DeviceHub register UUIDs to import for that device. Empty array imports every register on the device (same as `Import all DH Tags of a Device`). |

```json
{
  "input": {
    "Tags": [
      {
        "DeviceID": "{{deviceID}}",
        "RegistersID": ["{{register_id}}"]
      }
    ]
  }
}
```

## Response

`200 OK` -- `application/json`

| Field                                         | Type    | Description                                                       |
|-----------------------------------------------|---------|-------------------------------------------------------------------|
| `data.ImportSomeDeviceHubTags.ImportedCount`  | integer | Newly imported tags.                                              |
| `data.ImportSomeDeviceHubTags.FailedCount`    | integer | Tags that could not be imported (missing register, name collision, etc.). |
| `data.ImportSomeDeviceHubTags.SkippedCount`   | integer | Tags already present in the hierarchy and left unchanged.         |

```json
{
  "data": {
    "ImportSomeDeviceHubTags": {
      "ImportedCount": 1,
      "FailedCount": 0,
      "SkippedCount": 0
    }
  }
}
```

## 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
mutation ImportSomeDeviceHubTags($input: ImportSomeDeviceTagsRequest!) {
    ImportSomeDeviceHubTags(input: $input) {
        ImportedCount
        FailedCount
        SkippedCount
    }
}
```

**Variables**

```json
{
    "input": {
        "Tags": [
            {
                "DeviceID": "{{deviceID}}",
                "RegistersID": [
                    "{{register_id}}"
                ]
            }
        ]
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "data": {
        "ImportSomeDeviceHubTags": {
            "ImportedCount": 1,
            "FailedCount": 0,
            "SkippedCount": 0
        }
    }
}
```

---

## 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

```http
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 ImportSomeDeviceHubTags($input: ImportSomeDeviceTagsRequest!) {
  ImportSomeDeviceHubTags(input: $input) {
    ImportedCount
    FailedCount
    SkippedCount
  }
}
```

### Variables

```json
{
  "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:

```json
{
  "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:

```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
mutation ImportSomeDeviceHubTags($input: ImportSomeDeviceTagsRequest!) {
    ImportSomeDeviceHubTags(input: $input) {
        ImportedCount
        FailedCount
        SkippedCount
    }
}
```

**Variables**

```json
{
    "input": {
        "Tags": [
            {
                "DeviceID": "{{deviceID}}",
                "RegistersID": []
            }
        ]
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "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

```http
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 ImportDeviceHubTag {
  ImportDeviceHubTags
}
```

No arguments.

## Response

`200 OK` -- `application/json`. `data.ImportDeviceHubTags` is the root of the resulting hierarchy (same shape as `Export As JSON`).

```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:

```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
mutation ImportDeviceHubTag {
    ImportDeviceHubTags
}
```

### Response

**Status**: 200 OK

```json
{
    "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
                }
            ]
        }
    }
}
```

---

## 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

```http
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 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`.                                                       |

```json
{
  "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:

```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 GetServiceConfig {
    GetServiceConfig {
        Host
        NodeUnderRoot
        Port
    }
}

```

### Response

**Status**: 200 OK

```json
{
    "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

```http
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 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`).                       |

```json
{
  "input": {
    "Host": "10.30.50.1",
    "Port": 4840,
    "NodeUnderRoot": true
  }
}
```

## Response

`200 OK` -- `application/json`. No data returned on success.

```json
{ "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:

```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
mutation SetServiceConfig($input: ServiceConfigRequest!) {
    SetServiceConfig(input: $input)
}

```

**Variables**

```json
{
    "input": {
        "NodeUnderRoot": true,
        "Host": "10.30.50.1",
        "Port": 4840
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "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

```http
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 ServiceStart {
  ServiceStart
}
```

No arguments.

## Response

`200 OK` -- `application/json`. No data returned on success.

```json
{ "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:

```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
mutation ServiceStart {
    ServiceStart
}

```

### Response

**Status**: 200 OK

```json
{
    "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

```http
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 ServiceStop {
  ServiceStop
}
```

No arguments.

## Response

`200 OK` -- `application/json`. No data returned on success.

```json
{ "data": { "ServiceStop": null } }
```

## 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
mutation ServiceStop {
    ServiceStop
}

```

### Response

**Status**: 200 OK

```json
{
    "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

```http
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 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`.                            |

```json
{
  "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:

```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 GetConnectionSettings {
    GetConnectionSettings {
        EnabledSecurityModes
        EnabledSecurityPolicies
        EnabledAuthModes
    }
}

```

### Response

**Status**: 200 OK

```json
{
    "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

```http
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 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`.                                                    |

```json
{
  "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.

```json
{ "data": { "UpdateConnectionSettings": null } }
```

## 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`.

### Security recommendations

- **Production**: disable `None` security mode and `Anonymous` auth.
- **Pilot / testing**: leave them on for ease of access.
- `Basic128Rsa15` is 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**

```graphql
mutation UpdateConnectionSettings($input: UpdateConnectionSettingsRequest!) {
    UpdateConnectionSettings(input: $input)
}
```

**Variables**

```json
{
    "input": {
        "EnabledSecurityModes": [
            "None",
            "Sign",
            "SignAndEncrypt"
        ],
        "EnabledSecurityPolicies": [
            "Basic256Sha256",
            "Basic256",
            "Basic128Rsa15",
            "Aes128_Sha256_RsaOaep",
            "Aes256_Sha256_RsaPss"
        ],
        "EnabledAuthModes": [
            "Anonymous",
            "Certificate",
            "Password"
        ]
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "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

```http
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 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.                     |

```json
{
  "data": {
    "DownloadServerLog": "WzIwMjQtMDctMzEgMTA6NDE6MTQuMTI5XSBbc2VydmljZV0gW2luZm9d..."
  }
}
```

To decode (example with Python):

```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:

```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 DownloadServerLog {
    DownloadServerLog
}

```

### Response

**Status**: 200 OK

```json
{
    "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

```http
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 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 | `null` -- the stored hash is not returned. To rotate, call `Update User`.                  |
| `data.ListUsers[].Disabled`          | boolean     | `true` if the account is disabled.                                                         |

```json
{
  "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 User` to change the disabled flag.

## 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 ListUsers {
    ListUsers {
        Disabled
        Password
        Username
    }
}

```

### Response

**Status**: 200 OK

```json
{
    "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

```http
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 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.                              |

```json
{
  "input": {
    "Username": "{{opc_username}}",
    "Disabled": false
  }
}
```

## Response

`200 OK` -- `application/json`. No data returned on success.

```json
{ "data": { "UpdateUser": null } }
```

## 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
mutation UpdateUser($input: UserRequest!) {
    UpdateUser(input: $input)
}

```

**Variables**

```json
{
    "input": {
        "Username": "{{opc_username}}",
        "Disabled": false
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "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

```http
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 DeleteUser($username: String!) {
  DeleteUser(username: $username)
}
```

### Variables

| Field        | Type      | Required | Description                                  |
|--------------|-----------|----------|----------------------------------------------|
| `username`   | `String!` | Yes      | User name to delete.                          |

```json
{ "username": "{{opc_username}}" }
```

## Response

`200 OK` -- `application/json`. No data returned on success.

```json
{ "data": { "DeleteUser": null } }
```

## 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
mutation DeleteUser($username: String!) {
    DeleteUser(username: $username)
}

```

**Variables**

```json
{
    "username": "{{opc_username}}"
}
```

### Response

**Status**: 200 OK

```json
{
    "data": {
        "DeleteUser": null
    }
}
```

---

## 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

```http
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 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`).                |

```json
{
  "data": {
    "GetServerMetrics": {
      "ActiveSessionsCount": 0,
      "ActiveSessions": []
    }
  }
}
```

## 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 GetServerMetrics {
    GetServerMetrics {
        ActiveSessionsCount
        ActiveSessions {
            ID
            Name
            ClientName
        }
    }
}

```

### Response

**Status**: 200 OK

```json
{
    "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

```http
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 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. |

```json
{
  "data": {
    "GetServerCertificate": "MIIFrDCCBJSgAwIBAgIE..."
  }
}
```

### Saving the certificate

```python
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:

```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 GetServerCertificate {
    GetServerCertificate
}
```

### Response

**Status**: 200 OK

```json
{
    "data": {
        "GetServerCertificate": "MIIFrDCCBJSgAwIBAgIEZqp3OjANBgkqhkiG9w0BAQsFADCBpDEoMCYGCgmSJomT8ixkARkWGGxpdG11cy1lZGdlLTAwNTA1NmI5YWZkMzELMAkGA1UEBhMCVVMxFTATBgNVBAcMDExvY2F0aW9uTmFtZTEVMBMGA1UECgwMT3JnYW5pemF0aW9uMQ0wCwYDVQQLDARVbml0MS4wLAYDVQQDDCVvcGN1YV93b3JrZXJAbGl0bXVzLWVkZ2UtMDA1MDU2YjlhZmQzMB4XDTI0MDczMTE3NDExNFoXDTI5MDczMDE3NDExNFowgaQxKDAmBgoJkiaJk/IsZAEZFhhsaXRtdXMtZWRnZS0wMDUwNTZiOWFmZDMxCzAJBgNVBAYTAlVTMRUwEwYDVQQHDAxMb2NhdGlvbk5hbWUxFTATBgNVBAoMDE9yZ2FuaXphdGlvbjENMAsGA1UECwwEVW5pdDEuMCwGA1UEAwwlb3BjdWFfd29ya2VyQGxpdG11cy1lZGdlLTAwNTA1NmI5YWZkMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALFSV5egpaXXakJHhtNnhPgG9OjiFYygtpVQwnpSnhDjUPl/gk4A0t7u1Jwa39YdMkflmZ6baip9TgSz5391jqzEHsA4d0f0BHF7qH70RoKJA4IugMbVRG20Sq/85/ZV5teL7KfoGpHnNVLMGrpQaPAbeyh3lytIaqsYSSd94+yKA63I16FotoYICH/0glG2Aqx4v3ujEgaSTDvZ+oYcs9qV/5yhurb59XoLCUnT9haMFvFkgADPR52IhLimuNUcT/+oOX51VMawk1aoDT49m2KN6TZBKM0rn9nU7RuGgSQ6Z47s0uCEJdSsdOLQboJRH9tThz5zRPruVPH2KHRLpM0CAwEAAaOCAeIwggHeMBIGA1UdEwEB/wQIMAYBAf8CAQAwUAYJYIZIAYb4QgENBEMWQSJHZW5lcmF0ZWQgd2l0aCBVbmlmaWVkIEF1dG9tYXRpb24gVUEgQmFzZSBMaWJyYXJ5IHVzaW5nIE9wZW5TU0wiMB0GA1UdDgQWBBRsjLQFZ7mfRHgUpigHRAQ3BGG0rDCB1AYDVR0jBIHMMIHJgBRsjLQFZ7mfRHgUpigHRAQ3BGG0rKGBqqSBpzCBpDEoMCYGCgmSJomT8ixkARkWGGxpdG11cy1lZGdlLTAwNTA1NmI5YWZkMzELMAkGA1UEBhMCVVMxFTATBgNVBAcMDExvY2F0aW9uTmFtZTEVMBMGA1UECgwMT3JnYW5pemF0aW9uMQ0wCwYDVQQLDARVbml0MS4wLAYDVQQDDCVvcGN1YV93b3JrZXJAbGl0bXVzLWVkZ2UtMDA1MDU2YjlhZmQzggRmqnc6MA4GA1UdDwEB/wQEAwIC9DAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwTgYDVR0RBEcwRYYpdXJuOmxpdG11cy1lZGdlLTAwNTA1NmI5YWZkMzpvcGN1YV93b3JrZXKCGGxpdG11cy1lZGdlLTAwNTA1NmI5YWZkMzANBgkqhkiG9w0BAQsFAAOCAQEAj0BAOyvaa6rMJhRFp1YUPoTa0/NsBJtaIwKJit2gE8ZRf9YW2gkk/FiGohltcDjCn91cBOoi9qQbzbzQsZ2siF3RZOhSSyUQRT3JfLxZ7RZv0ogNiYzL2gtlysBqZGJFoIYTWHqj9NHlmCCovywbcCsv/qXb4CHfTtrGnsig9+eS42xT28oe/ZToQITAQx97R+sUVqJ4RHyHRyENMHhW4GSz0eVnXXrtve1ITVki5CvzdVDCstfPRrMQUoDGNma7DAf6P0xF9A12ai0IfATyTgWaiCfInZEqCOLd0IRZ6dEfeEMbomoTRHf6n02Qqas/Gq50d4seUzVLnHbnJb6sug=="
    }
}
```

---

