---
title: Add Tags
slug: litmusedge-v2/JtStgmp83wfgreqyAB_2l
description: Learn how to add tags to connected devices. 
docTags: 
createdAt: 2022-06-16T15:16:56.000Z
---

You can add tags to connected devices by navigating to **DeviceHub&#x20;**> **Tags**.&#x20;

To learn more about the list of registers for specific devices, visit the [Industrial Systems Connection Guide](docId:8O4KSDuaFz6jcegj0Whs4).&#x20;

You can add tags as follows:

- **Add a tag**: Adds a single tag f or the selected device.
- **Upload CSV**: Uploads a list of tags from a CSV file.
- **Browse tags**: Search for pre-defined device tags and select the ones to add. See [Search for Pre-defined Device Tags](docId\:XhlIHBIjkrF3u0cLkL8yE) to learn more.&#x20;

# Video

:::Iframe{iframeHeight="0" code="<iframe width=&#x22;560&#x22; height=&#x22;315&#x22; src=&#x22;https://www.youtube.com/embed/_RcLeg_wQfo?si=VQkrsS_H0YYi-NZy&#x22; title=&#x22;YouTube video player&#x22; frameborder=&#x22;0&#x22; allow=&#x22;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#x22; allowfullscreen></iframe>"}

:::

# Before You Begin

Before creating tags, make sure you have connected a device. Refer to [Connect a Device](docId\:iSH7BQHZxsWtDx8vbNSZb).&#x20;

# Important

Refer to the following information on Free Tags and OPC UA Drivers:

- Certain device drivers do not have a list of register names in the *Add Tag* form. These are referred to as Free Tags.
- You must enter case-sensitive register names exactly how they are defined in the device.
- Devices do not display a *Connected&#x20;*&#x73;tatus until a tag with a correct register name is created. See [Device Connectivity Issues](docId\:tN5iDgvbEh5q_UtY0dGr7) for more information.&#x20;
- For OPC UA, map the OPC server tags to the client. Enter the Register Name using this format where the semicolon is required: `ns=1;s=tagname`  . For example: `ns=2;s=Channel1.Device1.Tag1`.

# Add an Individual Tag

You can manually add individual tags to a device.&#x20;

**To add a tag for a single register:**

1. Navigate to **DeviceHub&#x20;**> **Tags**.&#x20;
2. From the *Tags&#x20;*&#x70;ane, click **Add Tag**, and then select **Add Tag**.
   The *Add Tag* dialog box appears.
   ![](https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/K8BJ5H37N8-8m7XmqYhXu_dg9kgjddwrtpye0zqwhpcadd-tags.png "The Add Tag option")
3. Click the **Select a Device** field, and then select an option from the drop-down list. Only devices that had been added to Litmus Edge appear in the drop-down list. The fields displayed in the *Add Tag* dialog box depend on the device driver type.
4. From the *Add Tag* dialog box, complete the parameters for the tag. Refer to the [Industrial Systems Connection Guide](docId:8O4KSDuaFz6jcegj0Whs4) for parameters specific to your device driver and review the *Tag Parameters* section.&#x20;
5. The following optional parameters apply to all device drivers. Configure them as needed.&#x20;
   - **Tag Formula**: Enter a formula for the tag to process the generated data. See [Tag Formula Variables](docId\:lUQaa9gRfmp2TVCocGBt8) to learn more.&#x20;
     Two variables are permitted: `value` (current tag value) and `timestamp` (current tag UNIX time in milliseconds). The following math functions are available:
     - sin
     - cos
     - tan
     - sqrt
     - power: power(`x`) performs the operation `10^x`.
     - log: log(`x`) is the natural logarithm (the logarithm is in base `e`).&#x20;
     - exp: exp(`x`) performs the operation `e^x`.
     - For additional functions on tag values such as rounding and data conversions, you can use [Analytics](docId\:zaoWl1npjlKEFhJbxhgvu) or the [Flows Manager](docId:-BvxNzlGo8FSoglIb4O-l). See [Analytics Guides](docId\:g-XBmNAkgtz4WzqhdHgUG) to learn more.&#x20;
   - **Only Publish on Change of Value**: Select the checkbox to customize NATS messages to be published only when the *value&#x20;*&#x70;arameter changes from a previous value to a new one. *Change of Value* only applies to boolean, numeric (such as int or float), and simple string data types. It does not apply to complex types, such as JSON or array. Poll-once topics will not be affected by *Change of Value* settings. These topics will still only see a single message.&#x20;
   - **Meta Data**: Metadata summarizes basic information about data. This feature allows you to define key-value pair data for the device output payload later on. It can then be used to find, use, and reuse particular instances of data. See [Organize Device and Tag Data by Using Metadata](docId\:sI-z6R5dZyYUYHLWzq4Zr) to learn more.&#x20;
6. When done configuring the tag, click **Add Tag**.&#x20;

:::hint{type="warning"}
**Important**: The current topic name generation rule uses a byte-specific replacement protocol to create topic names. In this system:

- If you use special characters in meta data key names, the special characters are replaced with underscore characters in the payload. This can cause two key names to be combined into one. For example, configuring the key names a\*\*b and a&\&b will cause only one key name to be created (a\_\_b).&#x20;
- **ASCII Special Characters:** Symbols and spaces are replaced with a single underscore (“\_”) since they are represented in 1 byte.
- **Accented and Extended Unicode Characters:** Characters with accents (e.g., “ó”) are replaced by a double underscore (“\_\_”), reflecting their 2-byte representation. The 3-byte and 4-byte Unicode characters are replaced with three (“\_\_\_*”) and four (“\_*\_\_\_”) underscores, respectively.
:::

The tag appears in the *Tags&#x20;*&#x70;ane.&#x20;

# Add Multiple Tags

You can add multiple tags at once by downloading a CSV template file, filling out the file with tag details, and uploading the CSV file.&#x20;

:::hint{type="warning"}
**Important**: When saving the CSV file, you must ensure that commas are used as column delimiters and not semicolons. If semicolons are used as column delimiters, you won't be able to upload the CSV file successfully. See [Tag Upload through CSV Issues](docId\:OBwYLemL9CT48bdrcS4zq) to learn more.&#x20;
:::

## Step 1: Download a Sample CSV Template

You will need to download a template CSV file that has the required fields for the tags you will add.&#x20;

**To download a sample CSV template:**

1. From the *Tags&#x20;*&#x70;ane, click the **Help&#x20;**&#x69;con.&#x20;
2. Select **Sample CSV Template**.
   The sample Tags CSV is downloaded to your local drive.
   ![](https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/E1dt3XFGYio-f1aijxtde_samplecsvtemplateicon.png "The Sample CSV Template option")

## Step 2: Populate the CSV Template File

You can now populate the CSV template with the tags that will be added. A row/record for each tag must be populated with attribute values, as described below.&#x20;

- Refer to the [Industrial Systems Connection Guide](docId:8O4KSDuaFz6jcegj0Whs4) and review the *Tag Parameters* section for your device. If tags for the device have additional fields that are not included in the template file, add them as required.&#x20;
- The order of the attribute columns in the template file may be in any order.&#x20;

Refer to the following sections for information on populating the CSV template file.&#x20;

### Example of a Tag CSV File

::File{src="https://api.archbee.com/api/presign/SSUUxKZUk9bFTEPNn_6Zo/1cyPXw9P8CGjZPpvdm55F_tag-sample.csv" label="Tag_sample.csv"}

| **deviceId**                         | **deviceName** | **driverName**                   | **name**         | **tagName** | **description**   | **valueType** | **registerID** | **publishCov** | **tagFormula**      | **metaData**                       | **pollingInterval** |
| ------------------------------------ | -------------- | -------------------------------- | ---------------- | ----------- | ----------------- | ------------- | -------------- | -------------- | ------------------- | ---------------------------------- | ------------------- |
| A581B3E2-12CC-4A69-92C0-2C09DAFC5148 | Test\_Device   | AB CompactLogix Ethernet FreeTag | TestRegisterName | TestTagName | SampleDescription | bool          |                | TRUE           | value+timestamp+100 | \{"MetaDataKey1":"MetaDataValue1"} | 1                   |

### Tag Attribute Rules

- The `deviceName` is required to find the corresponding device. The `deviceId` can be omitted. If the `deviceId` is not included, a `device name not found error` displays, but the tags will still be successfully added.&#x20;
- Attribute values are required unless noted as optional.
  - If an optional value is null, it is ignored. This allows for the loading of register definitions for multiple device types from a single file.
  - If the value is null and the device driver defines it as mandatory, the tag is not imported.
  - If an optional value is present in the CSV file, but it is not supported by the device driver, it is treated as an error and the tag is not imported.
- Attribute columns in the CSV can be in any order.

| **Attribute Name** | **Data Type** | **Description**                                                                                                                                        | **Required** | **Notes**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| ------------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| deviceId           | string        | ID of the device. You can get this value from the device tile in **DeviceHub&#x20;**> **Devices**.                                                     | No           | Get this value from the **Copy&#xA0;**&#x69;con next to the device ID in the device tile in **DeviceHub&#x20;**> **Devices**.<br /><br />If a device identified by the `deviceId` is not found, `deviceName` is used.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| deviceName         | string        | The name you configure for the device.                                                                                                                 | Yes          |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| driverName         | string        | Driver name is for validating optional attributes against `registration.json`. This type should directly correspond to the name of the driver package. | No           | Get this value from the **Copy&#xA0;**&#x69;con next to the driver name in the device tile in **DeviceHub&#x20;**> **Devices**.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| name               | string        | PLC register name or full PLC register address.                                                                                                        | Yes          | Depends on `valueType`<br />This name is case sensitive.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| tagName            | string        | The name you configure for the tag.                                                                                                                    | Yes          |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| description        | string        | The description you configure for the tag.                                                                                                             | No           |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| valueType          | string        | Type of the register value.                                                                                                                            | Yes          | The list of available selection depends on the **Register Table&#x20;**&#x6F;f the device.<br />Examples: bit, word                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| registerID         | string        | A unique register Id generated for this tag                                                                                                            | No           | This should be left blank as this value is generated when the tag is created.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| publishCoV         | boolean       | A flag that indicates whether the **Only Publish on Change of Value** setting is enabled.                                                              | No           | If left bank, the value `FALSE` is set by default.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| tagFormula         | string        | A formula that will transform the tag payload value to a new final value.                                                                              | No           | This column will be empty if there is no formula entered.<br />Available parameters for the formula are as follows:<br />- `value` - current tag value
- `timestamp` - current tag unit time in milliseconds&#xD;<br />Available math functions&#xD;<br />- `sin`&#xD;
- `cos`&#xD;
- `sqrt`&#xD;
- `tan`&#xD;
- `power`&#xD;
- `log`&#xD;
- `exp`&#xD;<br />Example formula:&#xD;<br />`sin(value) + 1`<br />For additional functions on tag values such as rounding and data conversions, you can use [Analytics](docId\:zaoWl1npjlKEFhJbxhgvu) or the [Flows Manager](docId:-BvxNzlGo8FSoglIb4O-l). See [Analytics Guides](docId\:g-XBmNAkgtz4WzqhdHgUG) and [Flows Guides](docId:6vRrU18gSNyAm7HcFE9m7) to learn more.  |
| metaData           | string        | A JSON-formatted string containing one or more Metadata key-value pairs                                                                                | No           |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| pollingInterval    | float         | Polling interval in seconds                                                                                                                            | No           | How often the tag will poll the driver for a value. 0 means auto polling disabled. 1 means poll every 1 second. If left blank, a value of 1 is set.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |

### CSV Formatting and Escaping Rules

Because CSV format is not standardized, several different methods could be used for escaping special characters. And, depending on locality, a different value separator may be used. For example, in European countries, a semi-colon is widely used as a separator. The Litmus Edge CSV specification adheres to the rules used by Microsoft Excel, as listed below:

- Field separators can be comma (`,`), semicolon (`;`), or tab (`\t`).
- Fields can have white spaces around them. This space is removed during processing.
- Fields can be escaped with double quotes (`"`) or single quotes (`'`). Leading or trailing white spaces inside the quotes are preserved.
- Any separator characters within a quoted field is treated as part of the field value.
- Any quotation character in a field value must be escaped with a backslash (`\`) character.
- Fields are parsed based on their data type: **string** values are read "as is" and **numeric&#xA0;**&#x76;alues are parsed with a numeric parser.
- Empty fields are treated as null values.

## Step 3: Upload Populated CSV File of Tags

Once the CSV template file is populated, you can upload it to add all tags that were added to the file.&#x20;

**To upload a populated CSV file:**

1. From the *Tags&#x20;*&#x70;ane, click **Add Tag**, and then selec&#x74;**&#x20;Upload CSV**.
   The *Upload Tags* dialog box appears.
   ![](https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/ACgIeDaqE3Tay5uu1pgVe_r8p-dmba2tno3kfje76hupload-csv.png "Upload CSV icon")
2. Click **Select CSV**.
3. Select the file to upload and click **Open**.&#x20;
4. From th&#x65;*&#x20;Upload Tags* dialog box, click **Upload**. Upon a successful upload, the tags appear in the *Tags&#x20;*&#x70;ane.
   If the details in the CSV file do not match the expected configuration, error messages indicate the issues.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/-qIuXV2E4sl-tgxV6m6eQ_upload-error.png" size="80" width="867" height="196" caption="Bulk Upload Error Message" position="center" showCaption="true"}

# Search for Pre-defined Device Tags

Some DeviceHub devices give you the option of searching, selecting, and downloading pre-defined device tags.&#x20;

Devices that support searching for device tags display a tag icon in the top-right corner of the device card.

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/R1a_I7-JJ7u8wECqagmeS_image.png" size="60" width="419" height="343" position="center" caption="Browse tag option shown for a device " showCaption="true"}

There are two ways to search for device tags:

- Use [Browse Tags](docId\:mL-1dnQKd6D_ZHZbe7QMw) to view all available tags for a device. You can then select and download tags applicable for your DeviceHub device.&#x20;
- Use [Server Search](docId:_DoKzYn5lWukmhO-6Cixc) to search for device tags. You will need to know the name of the tags you want to search for and add to your DeviceHub device.&#x20;

