> For the complete documentation index, see [llms.txt](https://docs.cybus.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.cybus.io/2-4-2/guides/system-connectivity/mes-erp-business-systems/ignition-integration.md).

# Ignition Integration

This guide describes how to integrate the Ignition SCADA platform by Inductive Automation with Connectware. Ignition publishes tag data to the Connectware MQTT broker using the Cirrus Link MQTT Transmission module, and Connectware reads Ignition tags directly through the OPC UA server that is built into every Ignition gateway. A complete example file is available at the end of this guide.

## Objectives

* Creating a Connectware user that the Ignition gateway uses to authenticate against the Connectware MQTT broker.
* Configuring the MQTT Transmission module to publish Ignition tag data to Connectware as plain JSON.
* Understanding the difference between Sparkplug B and plain JSON payloads.
* Reading Ignition tags with the Connectware OPC UA client connector.

## Prerequisites

To follow this guide, you will need the following:

* A running instance of Cybus Connectware.
* An Ignition gateway (8.1 or later) with network access to Connectware. For the MQTT path, the [Cirrus Link MQTT Transmission module](https://docs.chariot.io/display/CLD80/MQTT+Transmission) 4.0.25 or later must be installed on the gateway. The UNS Transmitter used in this guide is available starting with this release.
* For the OPC UA path: the Ignition OPC UA module, which is part of the standard Ignition installation.
* Access to the [Admin UI](/2-4-2/access/admin-ui.md) with sufficient [user permissions](/2-4-2/access/user-management.md).
* Basic knowledge of MQTT and the Connectware [services](/2-4-2/data-flows/services.md) concept (for example, [service commissioning files](/2-4-2/data-flows/service-commissioning-files.md), [connections](/2-4-2/data-flows/service-commissioning-files/resources/cybus-connection.md), and [endpoints](/2-4-2/data-flows/service-commissioning-files/resources/cybus-endpoint.md)).
* It helps to be familiar with [Connecting an MQTT Client to Publish and Subscribe Data](/2-4-2/guides/machine-connectivity/gateways-generic-protocols/connecting-an-mqtt-client-to-publish-and-subscribe-data.md).

## Connectware and Ignition Integration

Ignition is a SCADA and HMI platform that manages its data as tags on the gateway. There are two complementary ways to exchange this data with Connectware:

* **MQTT (recommended)**: The MQTT Transmission module turns the Ignition gateway into an MQTT client that connects out to the Connectware broker and publishes tag changes as they happen. Connectware acts as the central broker, so no inbound firewall port to Ignition is required, and the data is immediately available to every other Connectware service and consumer.
* **OPC UA**: Connectware connects to the OPC UA server built into the Ignition gateway using the [OPC UA client connector](/2-4-2/guides/system-connectivity/industry-standards-interoperability/using-connectware-as-an-opc-ua-client.md) and subscribes to individual tags. Use this path when the Cirrus Link modules are not available on the gateway, or when you want Connectware to control exactly which tags are read.

The MQTT path is configured mostly on the Ignition side. The only Connectware-side preparation is a user with publish permissions. The OPC UA path is configured in a service commissioning file.

### Sparkplug B and Plain JSON

By default, MQTT Transmission publishes tag data as Sparkplug B: the topics live under the `spBv1.0` namespace and the payloads are protobuf-encoded binary. Connectware routes these messages like any other MQTT message, but treats the payloads as opaque binary data. The [Rule Engine](/2-4-2/data-flows/rule-engine.md), mappings, and the Data Explorer cannot inspect or transform them without an additional decoding step. Choose Sparkplug B only if a downstream consumer, such as a Sparkplug-aware application, decodes the payloads itself.

Since release 4.0.25, MQTT Transmission includes the [UNS Transmitter](https://docs.chariot.io/display/CLD80/Publishing+using+the+MQTT+Transmission+UNS+Transmitter), which publishes tag values as plain JSON messages under the `unsAv1.0` namespace. Connectware can read, transform, and route these messages directly, which makes the UNS Transmitter the preferred option for this integration. This guide uses the UNS Transmitter.

## Publishing Ignition Tags to Connectware

### Creating a Connectware User for Ignition

The Ignition gateway authenticates against the Connectware broker with username and password. Create a dedicated user and grant it publish permissions on the UNS namespace:

1. In the Admin UI, click **User** on the navigation panel.
2. Click **Add User** and create a user, for example `ignition`, with a strong password.
3. In the Users and Roles list, click the new user.
4. In the Edit User dialog, click **Advanced Mode**.
5. Click the **+** icon to open the Add Permissions panel.
6. Click **MQTT** and enter `unsAv1.0/#` in the Topic field. The wildcard `#` covers every tag path that the UNS Transmitter publishes.
7. Select the `write` operation. This is equivalent to MQTT publish. The UNS Transmitter only publishes and does not subscribe to any topics.
8. Click **Add**, then click **Update**.

For details on MQTT permissions, see [Permissions](/2-4-2/access/user-management/permissions.md).

{% hint style="info" %}
If you decide to use the default Sparkplug B transmitters instead of the UNS Transmitter, grant the user `readWrite` permissions on `spBv1.0/#`. Sparkplug edge nodes subscribe to command topics in addition to publishing data.
{% endhint %}

### Adding Connectware as an MQTT Server in Ignition

Configure the connection to the Connectware broker on the Ignition gateway:

1. In the Ignition Gateway web interface, navigate to **Config > MQTT Transmission > Settings**.
2. On the **Servers** tab, click **Create new MQTT Server**.
3. Enter a name, for example `Connectware`.
4. Set the URL to `ssl://${CONNECTWARE_HOST}:8883`.
5. Enter the username and password of the Connectware user that you created for Ignition.
6. If your Connectware instance uses a self-signed certificate, upload the Connectware CA certificate in the **CA Certificate File** field. For more information, see [CA Certificates](/2-4-2/access/security/tls-certificates/ca-certificates.md).
7. Save the server configuration. The new server is assigned to the Default server set.

Replace the following value:

* `${CONNECTWARE_HOST}`: The hostname or IP address of your Connectware instance.

The **Servers** tab shows the connection state. Once the configuration is saved, the state changes to **1 of 1** connected. If the state stays at **0 of 1**, check the credentials, the broker address, and the certificate settings.

For unencrypted test setups, you can use `tcp://${CONNECTWARE_HOST}:1883` instead. Use TLS on port 8883 for production.

### Publishing Plain JSON with the UNS Transmitter

The UNS Transmitter monitors a tag folder and publishes every tag change as a JSON message:

1. In the Ignition Gateway web interface, navigate to **Config > MQTT Transmission > Settings**.
2. On the **UNS Transmitter** tab, create a new transmitter.
3. Select the **Tag Provider**, for example `default`, and optionally a **Tag Path** to restrict the transmitter to a tag folder.
4. Keep the Default server set, so the transmitter uses the Connectware server connection.
5. Save the transmitter configuration.

The transmitter publishes each tag on a topic that mirrors the tag path, prefixed with the `unsAv1.0` namespace. For example, a tag `Enterprise/Site 1/Line 1/Temperature` arrives on the topic `unsAv1.0/Enterprise/Site 1/Line 1/Temperature` with a payload like the following:

{% code lineNumbers="true" %}

```json
{
  "name": "Enterprise/Site 1/Line 1/Temperature",
  "dataType": "Int32",
  "value": 42,
  "timestamp": 1727215043878,
  "qualityCode": 192
}
```

{% endcode %}

In addition to the data messages, the transmitter publishes one `.props` message per tag when it connects, containing the tag properties.

{% hint style="info" %}
MQTT topic segments with spaces, such as `Site 1`, are valid MQTT but harder to handle in downstream systems. Prefer tag names without spaces on the Ignition side.
{% endhint %}

### Republishing the UNS Topics

You can use the incoming data directly from the `unsAv1.0` topics. If you prefer to serve the data in your own topic hierarchy, add a mapping that republishes the whole topic tree. The named wildcard `#topic` carries the remainder of the topic path over to the output topic:

{% code lineNumbers="true" %}

```yaml
unsTopicMapping:
  type: Cybus::Mapping
  properties:
    mappings:
      - subscribe:
          topic: 'unsAv1.0/#topic'
        publish:
          topic: 'ignition/uns/#topic'
```

{% endcode %}

This mapping is part of the example service commissioning file at the end of this guide. For more information on topic wildcards, see [Cybus::Mapping](/2-4-2/data-flows/service-commissioning-files/resources/cybus-mapping.md).

## Reading Ignition Tags via OPC UA

Every Ignition gateway includes an OPC UA server. Connectware connects to it as an OPC UA client and subscribes to tags.

### Preparing the Ignition OPC UA Server

By default, the Ignition OPC UA server only listens on `localhost` and does not expose the Ignition tag providers. Adjust the server settings:

1. In the Ignition Gateway web interface, navigate to **Config > OPC UA > Server Settings**.
2. Set the **Bind Addresses** to `0.0.0.0`, or to the specific network interface that Connectware reaches, so external clients can connect.
3. In the Advanced section, enable **Expose Tag Providers**. This makes the Ignition tag providers visible to external OPC UA clients. Without this setting, only device nodes are visible.
4. Check the **Security Policies** setting. Connectware connects without message security by default, so add the `None` policy for a first test. To use `Basic256Sha256` instead, configure the `options.securityPolicy` and `options.messageSecurityMode` properties and a client certificate on the Connectware connection. For the available properties, see [OPC UA Connection Properties](/2-4-2/connectors/shop-floor-connectors/opc-ua/opc-ua-client/opcuaconnection.md).
5. Note the credentials for the OPC UA server. Anonymous access is disabled by default, and new Ignition installations create the user `opcuauser` with the password `password`. Change this password before you expose the server to the network.

The server listens on port `62541`. The session endpoint is `opc.tcp://${IGNITION_HOST}:62541` and the discovery endpoint is `opc.tcp://${IGNITION_HOST}:62541/discovery`. For details, see [Ignition's OPC UA Server](https://www.docs.inductiveautomation.com/docs/8.1/ignition-modules/opc-ua/ignitions-opc-ua-server) in the Ignition user manual.

Exposed tags use NodeIds of the form `ns=2;s=[${TAG_PROVIDER}]${TAG_PATH}`, for example `ns=2;s=[default]Line1/Temperature`. To find the NodeIds of your tags, browse the server with an OPC UA client as described in [Using Connectware as an OPC UA Client](/2-4-2/guides/system-connectivity/industry-standards-interoperability/using-connectware-as-an-opc-ua-client.md).

### Connecting Connectware to the Ignition OPC UA Server

We define the address and the credentials of the Ignition gateway as parameters, so you can set them when you install the service:

{% code lineNumbers="true" %}

```yaml
parameters:
  ignitionHost:
    description: Hostname or IP address of the Ignition gateway
    type: string
    default: 192.168.1.100

  opcuaPort:
    description: Port of the Ignition OPC UA server
    type: integer
    default: 62541

  opcuaUsername:
    description: Username for the Ignition OPC UA server
    type: string
    default: opcuauser

  opcuaPassword:
    description: Password for the Ignition OPC UA server
    type: string
```

{% endcode %}

The connection resource uses the `Opcua` protocol and the endpoint resources subscribe to individual tags. The `topic` property defines the MQTT topic on which Connectware publishes the values:

{% code lineNumbers="true" %}

```yaml
resources:
  ignitionOpcuaConnection:
    type: Cybus::Connection
    properties:
      protocol: Opcua
      connection:
        host: !ref ignitionHost
        port: !ref opcuaPort
        username: !ref opcuaUsername
        password: !ref opcuaPassword

  temperatureEndpoint:
    type: Cybus::Endpoint
    properties:
      protocol: Opcua
      connection: !ref ignitionOpcuaConnection
      topic: ignition/opcua/line-1/temperature
      subscribe:
        nodeId: 'ns=2;s=[default]Line1/Temperature'
```

{% endcode %}

Replace the NodeId with the tag path of your own tag provider and tags.

## Verifying the Integration

1. Install the service commissioning file and set the parameters. See [Installing Services](/2-4-2/data-flows/services/managing/installing.md).
2. Check that the OPC UA connection is in the **Connected** state on the service details page in the Admin UI. If the connection does not reach the connected state, check the bind address, the security policies, and the credentials of the Ignition OPC UA server.
3. In Ignition, check that the MQTT Transmission server state shows **1 of 1** connected.
4. Change a tag value in the Ignition Designer, for example with a memory tag.
5. Open the [Data Explorer](/2-4-2/monitoring/data-explorer.md) and check the incoming data on the `unsAv1.0` topics (or `ignition/uns` if you use the republishing mapping) and on the `ignition/opcua` topics.

## Service Commissioning File Example

{% file src="/files/zbywwWkrFFnLUn5OQqj5" %}

{% code title="ignition-example.yml" lineNumbers="true" expandable="true" %}

```yaml
---
# ----------------------------------------------------------------------------
# Service Commissioning File
# ----------------------------------------------------------------------------
# Copyright: Cybus GmbH
# Contact: support@cybus.io
# ----------------------------------------------------------------------------
# Ignition Integration (Example)
# ----------------------------------------------------------------------------

description: >
  Service commissioning file for the integration between Connectware and
  Inductive Automation Ignition (Example)

metadata:
  name: Ignition Integration
  provider: cybus
  homepage: https://www.cybus.io
  version: 1.0.0

parameters:
  ignitionHost:
    description: Hostname or IP address of the Ignition gateway
    type: string
    default: 192.168.1.100

  opcuaPort:
    description: Port of the Ignition OPC UA server
    type: integer
    default: 62541

  opcuaUsername:
    description: Username for the Ignition OPC UA server
    type: string
    default: opcuauser

  opcuaPassword:
    description: Password for the Ignition OPC UA server
    type: string

resources:
  # Connection to the OPC UA server built into the Ignition gateway
  ignitionOpcuaConnection:
    type: Cybus::Connection
    properties:
      protocol: Opcua
      connection:
        host: !ref ignitionHost
        port: !ref opcuaPort
        username: !ref opcuaUsername
        password: !ref opcuaPassword

  # Reads exposed Ignition tags and publishes them to MQTT topics
  temperatureEndpoint:
    type: Cybus::Endpoint
    properties:
      protocol: Opcua
      connection: !ref ignitionOpcuaConnection
      topic: ignition/opcua/line-1/temperature
      subscribe:
        nodeId: 'ns=2;s=[default]Line1/Temperature'

  machineStateEndpoint:
    type: Cybus::Endpoint
    properties:
      protocol: Opcua
      connection: !ref ignitionOpcuaConnection
      topic: ignition/opcua/line-1/machine-state
      subscribe:
        nodeId: 'ns=2;s=[default]Line1/MachineState'

  # Republishes the plain JSON messages of the MQTT Transmission
  # UNS Transmitter under the ignition/uns topic hierarchy
  unsTopicMapping:
    type: Cybus::Mapping
    properties:
      mappings:
        - subscribe:
            topic: 'unsAv1.0/#topic'
          publish:
            topic: 'ignition/uns/#topic'
```

{% endcode %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.cybus.io/2-4-2/guides/system-connectivity/mes-erp-business-systems/ignition-integration.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
