Connectivity Software User's Guide and Reference
Sparkplug Edge Node Object Operations And Notifications
Rapid Toolkit for Sparkplug > Concepts > Developing Sparkplug Edge Nodes > Sparkplug Edge Node Object Operations And Notifications
In This Topic

Introduction

This article describes the operations that your code can invoke on the Sparkplug edge node object (an instance of the EasySparkplugEdgeNode Class), and the notifications that this object provides.

Starting and Stopping the Edge Node

The Sparkplug edge node is started by calling the Start Method. The edge node must not already be started at that moment. This method initializes the edge node operations, sets up its contents, and initiates connection to the configured MQTT broker.

The Start Method operates asynchronously. The edge node may not yet be connected to the broker and ready for operation when this method completes.

After you call the Start Method, let the edge node run for as long as needed.

The Sparkplug edge node is stopped by calling the Stop Method. The edge node must be running (started) at that moment. This method stops the edge node operations and initiates disconnecting from the MQTT broker. This method performs a graceful shutdown of the edge node, ensuring that resources are properly released and that subscribers are notified of the disconnection.

The Stop Method operates asynchronously. The edge may not yet have disconnected from the MQTT broker when this method completes.

The following example illustrates how to start and stop the Sparkplug edge node.

.NET

// This example shows how to create a Sparkplug edge node with a single metric, start and stop it.
//
// You can use any Sparkplug application, including our SparkplugCmd utility and the SparkplugApplicationConsoleDemo
// program, to subscribe to the edge node data. 
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-ConnectivityStudio/Latest/examples.html .
// Sparkplug examples in C# on GitHub: https://github.com/OPCLabs/Examples-ConnectivityStudio-CSharp .
// Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
// a commercial license in order to use Online Forums, and we reply to every post.

using System;
using OpcLabs.EasySparkplug;
using OpcLabs.EasySparkplug.OperationModel;

namespace SparkplugDocExamples.EdgeNode._EasySparkplugEdgeNode
{
    partial class Start_Stop
    {
        static public void Main1()
        {
            // Note that the default port for the "mqtt" scheme is 1883.
            var hostDescriptor = new SparkplugHostDescriptor("mqtt://localhost");

            // Instantiate the edge node object and hook events.
            var edgeNode = new EasySparkplugEdgeNode(hostDescriptor, "easyGroup", "easySparkplugDemo");
            edgeNode.SystemConnectionStateChanged += edgeNode_Main1_SystemConnectionStateChanged;

            // Define a metric providing random integers.
            var random = new Random();
            edgeNode.Metrics.Add(new SparkplugMetric("MyMetric").ReadValueFunction(() => random.Next()));

            // Start the edge node.
            Console.WriteLine("The edge node is starting...");
            edgeNode.Start();

            Console.WriteLine("The edge node is started.");
            Console.WriteLine();

            // Let the user decide when to stop.
            Console.WriteLine("Press Enter to stop the edge node...");
            Console.ReadLine();

            // Stop the edge node.
            Console.WriteLine("The edge node is stopping...");
            edgeNode.Stop();

            Console.WriteLine("The edge node is stopped.");
        }


        static void edgeNode_Main1_SystemConnectionStateChanged(
            object sender, 
            SparkplugConnectionStateChangedEventArgs eventArgs)
        {
            // Display the new connection state (such as when the connection to the broker succeeds or fails).
            Console.WriteLine($"{nameof(EasySparkplugEdgeNode.SystemConnectionStateChanged)}: {eventArgs}");
        }
    }
}
' This example shows how to create a Sparkplug edge node with a single metric, start and stop it.
'
' You can use any Sparkplug application, including our SparkplugCmd utility and the SparkplugApplicationConsoleDemo
' program, to subscribe to the edge node data.
'
' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-ConnectivityStudio/Latest/examples.html .
' Sparkplug examples in C# on GitHub: https://github.com/OPCLabs/Examples-ConnectivityStudio-CSharp .
' Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
' a commercial license in order to use Online Forums, and we reply to every post.

Imports OpcLabs.EasySparkplug
Imports OpcLabs.EasySparkplug.OperationModel

Namespace Global.SparkplugDocExamples.EdgeNode._EasySparkplugEdgeNode
    Partial Class Start_Stop
        Public Shared Sub Main1()
            ' Note that the default port for the "mqtt" scheme is 1883.
            Dim hostDescriptor = New SparkplugHostDescriptor("mqtt://localhost")

            ' Instantiate the edge node object and hook events.
            Dim edgeNode = New EasySparkplugEdgeNode(hostDescriptor, "easyGroup", "easySparkplugDemo")
            AddHandler edgeNode.SystemConnectionStateChanged, AddressOf edgeNode_Main1_SystemConnectionStateChanged

            ' Define a metric providing random integers.
            Dim random = New Random()
            edgeNode.Metrics.Add(New SparkplugMetric("MyMetric").ReadValueFunction(Function() random.Next()))

            ' Start the edge node.
            Console.WriteLine("The edge node is starting...")
            edgeNode.Start()

            Console.WriteLine("The edge node is started.")
            Console.WriteLine()

            ' Let the user decide when to stop.
            Console.WriteLine("Press Enter to stop the edge node...")
            Console.ReadLine()

            ' Stop the edge node.
            Console.WriteLine("The edge node is stopping...")
            edgeNode.Stop()

            Console.WriteLine("The edge node is stopped.")
        End Sub

        Private Shared Sub edgeNode_Main1_SystemConnectionStateChanged _
            (ByVal sender As Object, ByVal eventArgs As SparkplugConnectionStateChangedEventArgs)
            ' Display the new connection state (such as when the connection to the broker succeeds or fails).
            Console.WriteLine($"{NameOf(EasySparkplugEdgeNode.SystemConnectionStateChanged)}: {eventArgs}")
        End Sub
    End Class
End Namespace

 

Edge Node State Notifications

The edge node object raises the Starting Event when the component is starting, and it raises the Stopped Event when the component has stopped.

These notifications are also broadcast to all metric and device objects, and can be handled on them too.

Example: Examples - Sparkplug Edge Node - React to starting and stopping

System Connection State Notifications

The edge node object implements the ISparkplugSystemConnectionMonitoring Interface, and provides notification about the state of its broker connection via the SystemConnectionStateChanged Event. For more information, see Rapid Toolkit for Sparkplug Operation Monitoring Services.

The "system connection" here denotes a connection to the Sparkplug system, normally an MQTT broker. The word "syste<' is used to distinguish this connection from one or more connections to the underlying data source, which the Sparkplug edge node will also typically have.

The example provided above for starting and stopping thre edge node (Examples - Sparkplug Edge Node - Start and stop the edge node, publish single metric) also illustrates how to receive notifications about system connection state changes.

 

Sparkplug is a trademark of Eclipse Foundation, Inc. "MQTT" is a trademark of the OASIS Open standards consortium. Other related terms are trademarks of their respective owners. Any use of these terms on this site is for descriptive purposes only and does not imply any sponsorship, endorsement or affiliation.

See Also