---
title: "Add and configure machines"
slug: "add-and-configure-machines"
updated: 2026-01-14T18:13:56Z
published: 2026-01-14T18:13:56Z
---

> ## Documentation Index
> Fetch the complete documentation index at: https://support.tulip.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Add and configure machines

*This guide will help you set up individual machines in Tulip via the Machines page and see their history.*

**In this article, you will learn:**

- **How to add individual machines to Tulip and map their data via attributes**
- **How to view the history of these machines without using an app or analytics**

## Create a Machine

In order to monitor machines in Tulip, you must first establish a connection to your data source:

- [How To Build Your First OPC UA Data Source](/r230/docs/how-to-build-your-first-opc-ua-connector)
- [How To Build Your First MQTT Data Source](/r230/docs/how-to-build-your-first-opc-ua-connector-1)

Then, you should [set up machine types and attributes](https://support.tulip.co/docs/how-to-set-up-machine-types) to categorize the data coming off the machine.

**To start adding individual machines, head to the Machines tab under Shop Floor.**

![image.png](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/image%28179%29.png)

To add your first machine to Tulip, use the **Create Machine** button.

![image.png](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/image%28180%29.png)

1. Give your machine a name.
2. Select your Machine Type.
3. [Optionally] map your machine to a Station.
  1. Mapping to a station will allow you to use *at this station* trigger actions to share applications across your fleet of machines.
4. Click **Create**.

### Map Machine Attributes to a datasource

Our machine has been created, now we need to map its attributes to the topics or nodes on our machine data source.

1. Navigate to the **Configuration** tab. *Notice that this tab has a yellow warning icon indicating that some machine attributes are not currently mapped to machine data sources* ![image.png](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/image%28181%29.png)
2. Select an attribute. Depending on your desired data source type, mapping will differ.

### Map to MQTT

[Video for "MQTT_Explainer.mp4"](https://tulip.widen.net/view/video/tveqbc6trj/MQTT_Explainer.mp4?u=dtggv3)

1. Select your broker. ![image.png](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/image%28182%29.png)
2. If no topics have been mapped on this machine select "Map to a new topic". ![image.png](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/image%28183%29.png)
3. Enter the topic path where your machine is outputting data. ![image.png](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/image%28184%29.png)

Note

We don't currently support single or multilevel wildcards in MQTT topics.

#### Get latest message

Select the Get Latest Message button to pull the last message (or the retain message) for the entered topic. ![image.png](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/image%28185%29.png)

Latest vs. Retained Message

If another machine attribute is mapped to this topic, we will return the latest message, even if the retained flag was not enabled on that message. This avoids interruptions in this data streaming to those other machine attributes. If the topic is unused by other machines, the retained message will be returned.

#### JSON payloads

If the data being passed as a json payload, JSON can be selected from the payload type and a selector can be added to identify what part of the JSON blob to map to the machine attribute, or a key:value pair can be selected in the latest message and a selector will automatically be generated. Tulip implements the [JSON-Query](https://www.npmjs.com/package/json-query) format for all JSON extractors.

![image.png](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/image%28186%29.png)

Select **Map to Attribute**.

### Map to OPC-UA

OPC UA Server Compatibility

OPC UA Server's differ in their implemention of the OPC UA spec. Tulip has been built for complete compatibility with PTC Kepware-compliant OPC UA servers, and may only support a subset of functionality for other OPC UA servers.

OPC UA servers implemented directly by PLCs often implement unique signatures for their OPC UA servers. Kepware has invested the time to build implementations to each of these server specs. [Learn more](https://www.ptc.com/en/products/kepware).

1. Select your OPC UA Data Source.

![image.png](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/image%28187%29.png)

1. Navigate to the OPC UA Node associated with this machine attribute.
2. Click the **map** icon. *Note: Only machine attributes of the same type can be mapped to OPC-Ua nodes* ![image.png](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/image%28188%29.png)

#### OPC UA data types

| Machine attribute type | Supported OPC UA type(s) |
| --- | --- |
| Boolean | Boolean |
| Integer | SByte, Byte, Int16, UInt16, Int32, UInt32 |
| Number (floating point) | Float, Double |
| Text | String, LocalizedText |

### Map to Tulip API

To pass data into a Tulip machine from any other hardware, you can leverage the machines API.

1. Select **Tulip API** from the machine data source selector.

![image.png](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/image%28190%29.png)

1. Select the Map icon to map this machine attribute to a Tulip API endpoint.

![image.png](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/image%28191%29.png)

## Viewing History of the machine

Using Machine Triggers, you will want to map these Attributes to states so that you can accurately track the status of the machine on a second by second basis.

After you set up those triggers, you can see a history of the past machine states using the **Activity History** tab within each individual machine.

Here's how to access the history:

![](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/How%20To%20Add%20Individual%20Machines%20And%20View%20Their%20History_195018144.png)

And here's an example of the history:

![](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/How%20To%20Add%20Individual%20Machines%20And%20View%20Their%20History_195020626.png)

Each row in the history is defined by the amount of time that the machine spent in a certain state.

Here are the columns in this view with data type:

- State (enum)
- Start Time (datetime)
- End Time (datetime)
- Duration (interval)
- Downtime Reason (enum)
- Program (text)
- Ideal Run Rate (number)
- Defect Count (number)
- Part Count (number)

Machine triggers can update the columns for each state based on attributes that you have mapped.

## Ingestion limits

The following rate limits are enforced for machine data sources:

| Protocol | Rate limit | Note |
| --- | --- | --- |
| **MQTT** | 1hz per machine attribute | Events reported immedately |
| **OPC UA** | 1hz per machine attribute | Tags polled every 1000ms |
| **API** | No Limit |  |
| **Overall** | 500hz per instance | When combining all types across all machines |

## Other machine limits

|  | Limit |
| --- | --- |
| Are there limits to the number of Machines I can configure? | No limit. |
| Are there limits to the number of Machine Types I can configure? | No limit. |
| Are there limits to the number of attributes per machine type? | No limit. |
| Are there limits to the number of Machine data sources? | No limit. |
| What is the timeout for [writing a Machine Attribute](/r230/docs/write-to-machine-attributes-using-opc-ua-mqtt)? | 20 Seconds (Configurable) |

---

Did you find what you were looking for?

You can also head to [community.tulip.co](https://community.tulip.co/?utm_source=intercom&amp;utm_medium=article-link&amp;utm_campaign=all) to post your question or see if others have solved a similar topic!

**Machine**

A **Machine**is a digital representation of a physical datasource. Machines have **Attributes**that are updated through an OPC-UA Connector or the Tulip API.

**Machine Type**

**Machine Types** are global definitions of what data to expect from machines of different types. Each Machine Type will have different states, **triggers**, and **attributes**.*EX. We have 5 makes/models of CNC mill, but they all have the same set of attributes (Spindle speed, feed rate, etc.) These can all be combined into a single "CNC Mill" Machine Type*

**Station**

**Stations**are a digital representation of a physical place or device in your facility. Stations are 1:1 with **Interfaces (display devices)** running Tulip Player, but Stations can also be assigned **Edge Devices,**Tulip Vision Camera Configurations, Machines,****and more.

**Machine Attribute**

**Machine Attributes**are setpoints and actual values for different parameters of your **Machine.**Attributes can be mapped to OPC-UA datasource Tags.

**Trigger**

**Triggers** are groups of logic that are tied to an app event, such as step open, timer, widget interaction, etc. App builders can add triggers to **widgets**, **machines**, **devices**, **apps**, and **steps**.

**Triggers** can contain **actions**, **transitions**, and **conditions**.

**Attribute**

**Attributes**are properties. In Tulip, an attribute generally references a property of a machine. Attributes can be either set points or actuals.

*Ex. Cycle time, Spindle speed, Feed rate, ect.*
