Skip to main content

Host Application

Use SparkplugHostApplication to consume Sparkplug lifecycle/data messages and publish node/device commands.

Core Responsibilities

  • Subscribe to Sparkplug topics, usually spBv1.0/#.
  • Track edge and device state using birth/death events.
  • Publish NCMD/DCMD commands, including rebirth requests.
  • Optionally publish/consume STATE messages.

Typical Setup

var clientOptions = new HiveMQClientOptionsBuilder()
.WithBroker("localhost")
.WithPort(1883)
.WithClientId("my-host")
.Build();

var sparkplugOptions = new SparkplugHostApplicationOptions
{
SparkplugTopicFilter = "spBv1.0/#",
UseStateMessages = false
};

var host = new SparkplugHostApplication(clientOptions, sparkplugOptions);

Handling Birth Events

host.NodeBirthReceived += (_, e) =>
{
Console.WriteLine($"Node birth: {e.Topic.GroupId}/{e.Topic.EdgeNodeId}");
};

host.DeviceBirthReceived += (_, e) =>
{
Console.WriteLine($"Device birth: {e.Topic.DeviceId}");
};

Sending Rebirth Commands

await host.StartAsync();
await host.PublishRebirthCommandAsync("myGroup", "myNode");

Scoped Topic Filters and STATE

STATE messages use spBv1.0/STATE/{primary_host_id} and do not include a group segment.
If you use a scoped filter like spBv1.0/myGroup/#, you will not receive STATE from other hosts.

Use one of these patterns:

  • Keep default broad filter: spBv1.0/#
  • Add a separate STATE subscription: spBv1.0/STATE/#

See Also