---
title: Add a Digital Twins Model
slug: edgemanager/add-a-digital-twins-model
docTags: 
createdAt: 2026-01-12T04:43:21.653Z
---

A model is a template that contains static and dynamic attributes, data transformations, and schemas. Instances are copies of a model configured with their own parameter values. After you create Digital Twins models, deploy the models or model instances to Litmus Edge. When you deploy, you:

- Create a new model manually or from an import file.
- Configure the model by defining static and dynamic attributes, data transformations, and schemas.
- Deploy the model from Litmus Edge Manager to your Litmus Edge instance.
- Deploy instances from Litmus Edge Manager to your Litmus Edge instance.

You create Digital Twins models by navigating to **Asset Management** > **Models&#x20;**&#x66;or a company.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/fueF6FVADoiov_SWIpAJK_image.png" size="80" width="1598" height="618" position="flex-start" darkWidth="1598" darkHeight="618" showCaption="false"}

See [Use Digital Twins to Contextualize Data](docId\:VDRP68HIwEA7iyLgo3eW7) for information on how to leverage Digital Twins.&#x20;

:::hint{type="info"}
**Note**: Digital Twins requires a Scale or Growth Litmus license.&#x20;
:::

# Core Concepts

## Static attributes

Static attributes are fixed metadata values you define on a model, such as `Manufacturer`, `Model`, or `Plant`. They act as placeholders and you set default values on the model and then override them for each instance. Use static attributes for information that describes an asset but doesn't change in real time.

## Dynamic attributes

Dynamic attributes represent real-time data from your assets, such as temperature or pressure readings. Each dynamic attribute has a data type (JSON, boolean, array, string, or number) and a topic that tells Litmus Edge where to read the data from. You can use topic expressions with parameter placeholders to define topics that vary per instance.

:::hint{type="info"}
**Note:** Dynamic attribute data type values are stored and returned in lower case.
:::

## Transformations

Transformations convert raw data published on a topic into a cleaner, more useful format before it reaches northbound systems. You can use JSON transformations to filter specific key-value pairs, or JSONata transformations for more complex logic like conditional outputs or computed values. Transformations are defined at the model level and applied to individual dynamic attributes.

## Schema

A schema defines a custom structure for organizing the model's attributes into a hierarchy. You build the schema by grouping static and dynamic attributes under named nodes. Schemas make it easier for downstream systems to consume your Digital Twins data in a predictable shape.

# Viewer and Administrator Roles

Visibility of edge devices is limited to the companies that you have access to. The actions that you can perform also depends on your asset management role (defined in Litmus Edge Admin Console). You are also assigned one of the following roles:

- The **Viewer** role allows view access to Digital Twins.
- The **Administrator** role allows full access to Digital Twins.

# Create the Model

You have two options for creating the model. You can create a new model or import a model as a JSON file.&#x20;

## Create a New Model

**To create a new model:**

1. From the companies list, navigate to **Asset Management** > **Models**.
2. From the *Models&#x20;*&#x70;ane, click the **Create a model&#x20;**&#x74;ile.&#x20;

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/C0i2SBCoLNH048S36HysR_image.png" size="80" width="1598" height="618" position="flex-start" darkWidth="1598" darkHeight="618" showCaption="false" indent="2"}

3. From the **Asset** drop-down, select a model type.
4. Enter the name of the model in the **Name** field.
5. Optionally, enter a short description of the model in the **Description** field.
6. Click **Add**.****
   A new model tile appears in the *Models&#x20;*&#x70;ane.

## Import an Existing Model

You can import a model as a JSON file.

To import an existing model, click **Import Model**, select a `<model name>.json` file, and click **Open**.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/KVU8A8_eQgOvTzgKE3UmG_image.png" size="80" width="1598" height="618" position="flex-start" darkWidth="1598" darkHeight="618" showCaption="false"}

## Model Versions

When you create a model, the model version starts at v.0. The version number increments when you save the model. The version number displays in the:

- Model tile.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/LYeur2HtDhgxPUw6u68Rc_image.png" size="50" width="344" height="180" position="flex-start" darkWidth="344" darkHeight="180" showCaption="false" indent="2"}

- Model and instance configuration page.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/tjlhhzl_FMIZdzIW2D3B5_image.png" size="50" width="1415" height="637" position="flex-start" darkWidth="1415" darkHeight="637" showCaption="false" indent="2"}

# Configure the Model

After creating the model and defining a name, you can configure it with static and dynamic attributes and schema to represent your assets or data structures.&#x20;

## Model Image

Select a model and click th&#x65;**&#x20;Upload image** icon to choose an image for the model. The image displays in the model tile on the *Models* pane.

![](https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/5P2JR-CZSllpsgZHNR6Cm_image.png)

## Static Attributes

When you create static attributes, you define default attribute values as placeholders. Later, you change the default values in model instances. For example, you might define `Manufacturer` , `Device Description`, `Model` and `Plant` attributes and change the static attribute values later in instances.

Manage the metadata for the model from the *Static Attributes* tab.&#x20;

### Add Static Attributes

If you need to filter existing attributes, you can use the search field.&#x20;

**To add static attributes:**

1. From the *Static Attributes* tab, click **Add new static attribute**.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/HrNlIzKeM4oF1JXziCc-n_image.png" size="80" width="1363" height="601" position="flex-start" darkWidth="1363" darkHeight="601" showCaption="false" indent="2"}

2. In the **Attribute Name** field, either select an attribute from the drop-down list or enter a new attribute name.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/uViDBm7SvqvqGMv2jU0Xa_image.png" size="80" width="777" height="517" position="flex-start" darkWidth="777" darkHeight="517" showCaption="false" indent="2"}

3. In the **Attribute Value** field, enter a value for the attribute.&#x20;

### Import Static Attributes

Before importing, create a CSV file with the following headers, then add rows with attribute names and values.

**Required Headers**

- ModelName
- Key
- Value

**Optional Headers**

- InstanceName

After creating the file:

1. Navigate to **Static Attributes**, and select **Import Attributes**.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/0PG0p86BgtsmCCbzunhYp_image.png" size="70" width="909" height="363" position="flex-start" darkWidth="909" darkHeight="363" showCaption="false" indent="2"}

2. In the dialog your browser opens, navigate to and open the CSV file.

### Export Static Attributes

You can export all attributes to a CSV file, modify them offline, and import them again.

To export a CSV file with existing static attributes:

Navigate to **Static Attributes**, and select **Export Attributes**. Attributes export to a CSV file.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/gNt_0_fes1K8ePB5JImje_image.png" size="80" width="905" height="312" position="flex-start" darkWidth="905" darkHeight="312" showCaption="false"}

## Dynamic Attributes

Next, define dynamic attributes that represent real-time data for your asset. Dynamic attributes can be JSON, boolean, array, string, or number data types. Each dynamic attribute can have an associated transformation.

### Add Dynamic Attributes

**To add a dynamic attribute:**

1. Click the **Add item** icon.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/miho4gYW1T0Uy9nxWIm7j_image.png" size="100" isUploading="false" width="1365" height="470" darkWidth="1365" darkHeight="470" showCaption="false" indent="2"}

2. In the **Name&#x20;**&#x66;ield, enter a name for the attribute.&#x20;
3. Optionally, enter a value for **Unit&#x20;**&#x61;nd select a **Data Type**. JSON applies if you do not specify a data type.
4. The **Skip Key&#x20;**&#x6F;ption is only available when the data type is JSON. Select **Skip Key** to exclude a specific attribute from the payload. Note that the value persists in the payload, for example, as `value='20'`.
5. Optionally, define a topic expression consisting of static string values and parameters by surrounding the expression in curly brackets (`{}`). For example, `devicehub.alias.{device}.tagname`.
6. Optionally, if you've created data transformation schemas, select one from the **SchemaID&#x20;**&#x66;ield.&#x20;
7. If you need to filter existing attributes, you can use the search field.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/bpnIJp3AW_EkOCH0gQ4Oz_image.png" size="100" width="934" height="315" position="flex-start" darkWidth="934" darkHeight="315" showCaption="false" indent="2"}

### Import and Export Dynamic Attributes

To import dynamic attributes, download the sample CSV file and populate it with your dynamic attributes. After creating the file, click the model tile, navigate to **Dynamic Attributes**, and click the **Import Attributes** icon.&#x20;

To export a CSV file of existing dynamic attributes, click **Export Attributes**.



::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/TNYO0UcV_QISp2Z2kIOH-_image.png" size="80" width="1369" height="359" position="flex-start" darkWidth="1369" darkHeight="359" showCaption="false"}

## Transformations

Use transformations to convert the raw JSON data published on topics in the message broker to a desired format. Transformations apply to specific dynamic attributes and the resulting transformation is included in the full Digital Twins and Publish Attributes payloads. Transformations clean your data and make it easier for northbound systems to consume. For example, create a transformation that eliminates duplicate timestamps and register IDs in your payload.

Transformations parse and transform the payload and specify a payload structure as the model inherits data. See [Use Digital Twins to Contextualize Data](docId\:VDRP68HIwEA7iyLgo3eW7) for information on formatting transformations.

With transformations, you can:

- Create a JSON transformation that filters specific key-value pairs  . For example, this transformation only includes the following attributes in the payload.

:::CodeblockTabs{indent="2"}
```json
}
  “value“: “$value“,
  “timestamp“: “$timestamp“:
}
```
:::

-  Create a JSONata transformation to perform&#x20;  dynamic filtering.  &#x20;[JSONata](https://docs.jsonata.org/overview.html) is a query language that allows logical conditions and computed outputs.  &#x20;For example, use JSONata to create an alert when a temperature tag exceeds a high or low threshold value.

:::CodeblockTabs{indent="2"}
```json
{
  "asset": deviceName,
  "area": metadata.area,
  "line": metadata.line,
  "quality": success,
  "metric": "metric",
  "timestamp": $fromMillis(1510067557121, '[M01]/[D01]/[Y0001] [h#1]:[m01][P]'),
  "value": value
}
```
:::

- Use a playground to test out your transformations before adding them to a model.



### Configure Transformations

**To add a transformation schema:**

1. Select the **Transformation&#x20;**&#x74;ab and click **Add a Schema**.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/6lKJuD52nj1CenMVeu0uG_image.png" size="80" width="1416" height="383" position="flex-start" darkWidth="1416" darkHeight="383" showCaption="false" indent="2"}

2. Enter a name for the schema.&#x20;
3. Select from **JSON&#x20;**&#x6F;r **JSONata&#x20;**&#x66;rom *Schema Type* drop-down menu.
4. In the code window, copy and paste the JSON-based or JSONata schema.&#x20;
5. (Optional) You can use the *System Variables&#x20;*&#x69;n the code drawer.
6. Experiment in a playground.
7. Click **Add**.

::Image[]{src="https://app.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/H2kgVlG9Be7fgHSNzExg4_image.png" size="80" width="1324" height="787" position="flex-start" darkWidth="1324" darkHeight="787" showCaption="false" indent="2"}

8. To edit or delete a schema, click the **Action menu** for the schema and select an option.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/2mGSZpYeUvxw4Lm_kTakG_image.png" size="80" width="1417" height="573" position="flex-start" darkWidth="1417" darkHeight="573" showCaption="false" indent="2"}

9. Apply the transformation to specific dynamic attributes.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/hmBoKyHjVYyjgVOvi0U0D_image.png" size="40" width="531" height="331" position="flex-start" darkWidth="531" darkHeight="331" showCaption="false" indent="2"}

## Configure Parameters

Parameters are variables that you can insert into topic expressions. Parameters help you save time when defining instances that have many attributes.

For example, define a `device` parameter and add it as a topic expression for a dynamic variable with the following syntax: `devicehub.alias.{device}.tagname`. Then modify the value for the `device` parameter for each instance on the **Instance Parameters** configuration page. &#x20;

:::hint{type="info"}
**Note:** Parameter names and values are case sensitive and cannot contain whitespaces. Allowed characters:

- A-Z in lowercase and uppercase
- 0-9
- Hyphen (`-`) and underscore (`_`) characters.
:::

To create a parameter:

1. Navigate to the **Parameters** tab and click **Add Item**.
2. Enter a parameter name and a placeholder value.

::Image[]{src="https://app.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/vz7aOACClOwFX7YSF3_WV_image.png" size="80" width="1716" height="500" position="flex-start" darkWidth="1716" darkHeight="500" showCaption="false" indent="2"}

3. Click **Save Row**. The new parameter saves.

::Image[]{src="https://app.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/Mb1bOMo5UAyDrd89phXo1_image.png" size="80" width="1715" height="478" position="flex-start" darkWidth="1715" darkHeight="478" showCaption="false" indent="2"}

4. Add the parameter to a topic expression. In this example, `devicehub.alias.{device}.Temperature` is added to the Temperature attribute.

::Image[]{src="https://app.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/CJg3VJFUo_we7yju6S1b-_image.png" size="100" width="1713" height="546" position="flex-start" darkWidth="1713" darkHeight="546" showCaption="false" indent="2"}

5. Select an instance of the model and click **Open Parameters**.

::Image[]{src="https://app.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/fc5rKU5pvYhvA81LBw4s3_image.png" size="80" width="1512" height="553" position="flex-start" darkWidth="1512" darkHeight="553" showCaption="false" indent="2"}

6. In the **Instance Parameters** dialog, edit the value for the device.

::Image[]{src="https://app.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/ciQXOhO6bjFyjKp4x-jSc_image.png" size="80" width="1249" height="744" position="flex-start" darkWidth="1249" darkHeight="744" showCaption="false" indent="2"}

7. Navigate to the **Instance Dynamic Attributes** page to see the topic defined for the dynamic attribute, based on your topic expression and parameter values.

::Image[]{src="https://app.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/1nfhKjBSrS16ovkUceek4_image.png" size="80" width="1792" height="302" position="flex-start" darkWidth="1792" darkHeight="302" showCaption="false" indent="2"}

:::hint{type="info"}
**Note:** If a dynamic attribute has a topic expression defined, the topic for instances cannot be edited. To change the dynamic attribute topic, you must edit the model or parameter values.
:::

## Schema

Use the *Schema&#x20;*&#x74;ab to create a custom data structure for the model.

::Image[]{src="https://app.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/w2jWB0PmYjwlZH_ZnBLuQ_image.png" size="80" width="1418" height="572" position="flex-start" darkWidth="1418" darkHeight="572" showCaption="false"}

To create a category for the schema

1. Click the **Action menu** icon for `root` and select **Add Node**.

::Image[]{src="https://app.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/bzfhCUhaDuytz8Rx5eeVS_image.png" size="80" width="1418" height="590" position="flex-start" darkWidth="1418" darkHeight="590" showCaption="false" indent="2"}

2. To add attributes to the schema, do one of the following:
   - Drag and drop attributes from the left-hand list to the canvas under the appropriate category.&#x20;
   - Click the **Action menu** for a category and select **Add item to Node**. Then, select the attribute to add.
3. When you have configured the schema, click **Save Model**.

::Image[]{src="https://app.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/31uNHcIQd4kUcCSpSCB7b_image.png" size="80" width="1418" height="590" position="flex-start" darkWidth="1418" darkHeight="590" showCaption="false" indent="2"}

### Export Schemas

To export an existing schema to a CSV file, click the **Export Schema&#x20;**&#x69;con.&#x20;

### Sync Attributes

To sync the existing schema

1. Click the **Sync Attributes&#x20;**&#x69;con.&#x20;
   All attributes are appended to the current hierarchy. If they exist, the *static\_attributes&#x20;*&#x61;nd *dynamic\_attributes&#x20;*&#x6E;odes are recreated.&#x20;
2. To confirm that you want to proceed, click **Yes**.

::Image[]{src="https://app.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/F_Jg9HwHL1ZhWA6OFJpg8_image.png" size="80" width="1418" height="550" position="flex-start" darkWidth="1418" darkHeight="550" showCaption="false" indent="2"}

### Clear Schema

To clear the schema builder tree, click **Clear Schema**. Changes apply when you save the model.

::Image[]{src="https://app.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/ek_7X8MOUaQz84sUSJODU_image.png" size="80" width="1418" height="550" position="flex-start" darkWidth="1418" darkHeight="550" showCaption="false"}

## Apply Model Updates to Instances

When you update your model, you can apply the changes to model instances.

To apply model updates:&#x20;

1. Click **Upgrade Instances**.

::Image[]{src="https://app.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/w7qQIdsrHtyK2pXC_-mvW_image.png" size="80" width="1415" height="678" position="flex-start" darkWidth="1415" darkHeight="678" showCaption="false" indent="2"}

2. Select the instances to upgrade and click **Upgrade**.

::Image[]{src="https://app.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/FX9n4ks-5B46lAE4UBYw4_image.png" size="50" width="584" height="311" position="flex-start" darkWidth="584" darkHeight="311" showCaption="false" indent="2"}

