Contents
Cirrus Link Resources
Cirrus Link Website
Contact Us (Sales/Support)
Forum
Cirrus Link Modules Docs for Ignition 7.9.x
Inductive Resources
Ignition User Manual
Knowledge Base Articles
Inductive University
Forum
This tutorial will provide step-by-step instructions for the following:
Upon completion of this module you will have an Ignition Gateway connected and publishing live Tag data to an Azure IoT Hub.
Follow the instructions in the Microsoft IoT Central How-to Guide for creating an IoT Central Application
Follow the instructions in the Microsoft IoT Central How-to Guide for adding a device to your Azure IoT Central application
Once configured, the device should look similar to the following:
From the left hand menu bar under Security > Permissions > Device connection groups, record the "ID scope" as this will be used later in the configuration of Azure Injector.
From the left hand menu bar under Security > Permissions > Device connection groups > SAS-IoT-Devices > Shared access signature (SAS), record either the "Primary key" or "Secondary key" as this will be used later in the configuration of Azure Injector.
Once you have Ignition and the Azure Injector Module installed and running we can setup the configuration to connect to your existing Azure IoT Central endpoint.
Navigate to the Azure Injector Modules configuration section from the left side bar in the Ignition Gateway and select the Azure IoT Central tab.
Set the following fields.
All other fields can remain default. Finally, click 'Save Changes' at the bottom of the configuration page. After a bit of time (about 30s or so) you should see the status go from 'Disconnected' to 'Connected' as shown below.
Also, in the IoT Central Application portal under devices you should see the device is connected.
Now the Azure Injector module is connected to the MQTT server in Azure IoT Central, we have to determine if there are are changes needed to the Tag Agent tab to be able to push data.
If you already have Ignition tags defined, for example from the Ignition OPC UA Server, then depending on the depth of your tag tree you may need to configure the Sparkplug Settings.
Once the Tag Agent is setup as needed, you can jump to Step 6: Publishing data.
If you do not have Ignition tags defined we will do that in the next step with a tag tree depth that requires no additional Sparkplug settings.
When the Azure Injector module is installed in Ignition, an Edge Node folder is automatically created in the 'default' Ignition tag provider.
Create a tree structure under this folder as shown below with some memory tags - this folder structure creates the same hierarchy that is described in the Sparkplug B specification of Group ID, Edge ID, and Device ID.
When the Azure Injector module is installed in Ignition, an Azure Injector tag provider is automatically created. This folder will contain both information tags about the module's version and state, as well as control tags for refreshing the module and Tag Agents.
Make sure that the Ignition Designer has read/write communications turned on by selecting the Project/Comm Read/Write button highlighted in the image below.
To refresh the default Tag Agent, open the folder "Azure Injector Control" and click on the Refresh Boolean. When this happens, the Tag Agent will scan the "Edge Nodes" folder and find the new Memory Tags that we have created, construct JSON payloads representing those tags with their current values and publish the payload to the Azure IoT Central endpoint that we have configured.
The Azure Injector Tag Agent will publish two JSON payloads to the Azure IoT Central endpoint. The format of these messages closely follows the Sparkplug B Specification's payload structure.
The first message shows the 'NBIRTH' message which is an indication that the Sparkplug Edge Node has come online.
The second message is a Sparkplug DBIRTH message denoting that a Sparkplug Device has come online along with its 'metrics' or tags, tag metadata, and values. In this case only a single tag is included in the payload.
This includes the following data messages.
{ "_unmodeleddata": { "topic": { "namespace": "spBv1.0", "edgeNodeDescriptor": "G1/E1", "groupId": "G1", "edgeNodeId": "E1", "type": "NBIRTH" }, "payload": { "timestamp": 1659458670039, "metrics": [ { "name": "bdSeq", "timestamp": 1659458670039, "dataType": "Int64", "value": 0 } ], "seq": 0 } }, "_eventtype": "Telemetry", "_timestamp": "2022-08-02T16:44:31.511Z" }
{ "_unmodeleddata": { "topic": { "namespace": "spBv1.0", "edgeNodeDescriptor": "G1/E1", "groupId": "G1", "edgeNodeId": "E1", "deviceId": "D1", "type": "DBIRTH" }, "payload": { "timestamp": 1659458670049, "metrics": [ { "name": "T1", "timestamp": 1659458670049, "dataType": "Int32", "metaData": {}, "properties": { "Quality": { "type": "Int32", "value": 192 } }, "value": 12 } ], "seq": 1 } }, "_eventtype": "Telemetry", "_timestamp": "2022-08-02T16:44:31.527Z" }
Because Azure Injector is driven by tag change events, try writing a '10' to the T1 tag. Do this by double clicking the T1 tag in Designer and updating the Value parameter.
This will result in a new DDATA message as shown below.
{ "_unmodeleddata": { "topic": { "namespace": "spBv1.0", "edgeNodeDescriptor": "G1/E1", "groupId": "G1", "edgeNodeId": "E1", "deviceId": "D1", "type": "DDATA" }, "payload": { "timestamp": 1659462601542, "metrics": [ { "name": "T1", "timestamp": 1659462601542, "dataType": "Int32", "value": 10 } ], "seq": 2 } }, "_eventtype": "Telemetry", "_timestamp": "2022-08-02T17:50:02.771Z" }
Additional Resources