SparkplugNet is a library to use the Sparkplug industrial IoT (IIoT) standard in .Net. It uses MQTTnet in the background.
- NetStandard 2.0
- NetStandard 2.1
- NetCore 3.1
- Net 5.0
- Net 6.0
- https://dotnet.microsoft.com/download/dotnet-framework
- https://dotnet.microsoft.com/download/dotnet-core
- https://dotnet.microsoft.com/download/dotnet
Sparkplug distinguishes between 5 different types of logical parts:
Part | Description |
---|---|
Primary application | The main application that needs to be always available to work with the data and store metrics. |
Applications | Other applications that work with the sent data and metrics. |
EoN nodes (Later only called nodes) | Logical devices that bundle data from end-of-network devices and publish their data. |
MQTT enabled devices | Sensors that work as a "hybrid" version of a node and a device and publish metrics and data. |
Non MQTT-enabled devices | Sensors that push data to nodes where the nodes publish their data to MQTT on their behalf. |
For basic usage, see the How to use file or the example project.
- MQTT broker that implements 100% of the MQTT 3.1.1 specification
- MQTT broker with QoS 0 and 1 support
- MQTT broker with retained messages support
- MQTT broker with last will and testament support
- MQTT broker with a flexible security system
- MQTTnet.Server for simple MQTT testing.
- HiveMQ CE with the Sparkplug InfluxDB Extension for Sparkplug testing.
- Ignition for Sparkplug testing.
- MQTT.fx has a Sparkplug data decoder. The binaries for version 1.7.1 can also be taken from https://github.com/SeppPenner/mqttfx171-backup (The software is now under development by a company and requires a license for version 1.7.1+).
- Version 2.2, spAv1.0 and spBv1.0.
- Although it's not required to publish a BDSEQ metric with all messages according to the specification,
this library includes it in any
spBv1.0
message except the state messages because I think it's useful. - The library uses Serilog for logging purposes because it's very extendable (
Log.Logger
or similar stuff in the examples refers to the Serilog library).
- https://www.eclipse.org/tahu/spec/Sparkplug%20Topic%20Namespace%20and%20State%20ManagementV2.2-with%20appendix%20B%20format%20-%20Eclipse.pdf
- https://documents.opto22.com/2357_Industrial_Strength_MQTT_Sparkplug_B.pdf
- https://github.com/eclipse/tahu
- https://github.com/eclipse/kura/blob/develop/kura/org.eclipse.kura.core.cloud/src/main/protobuf/kurapayload.proto
- https://github.com/eclipse/tahu/blob/master/sparkplug_b/sparkplug_b_c_sharp.proto
- https://protogen.marcgravell.com/
- https://stackoverflow.com/questions/66199386/protobuf-net-how-to-use-the-any-data-type
- http://www.steves-internet-guide.com/spsparkplug-payloads-and-messages/
See the Changelog.
Thanks goes to these wonderful people (emoji key):
HansM 💻 📖 💡 🚧 📆 |
insightdocs |
This project follows the all-contributors specification. Contributions of any kind welcome!