SparkplugNet is a library to use the Sparkplug industrial IoT (IIoT) standard in .Net. It uses MQTTnet in the background.
- Net 8.0
 - Net 9.0
 
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 Eclipse™ Sparkplug™ Technology Compatibility Kit for Sparkplug testing, following also issue #39 for more details.
 
- 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+).
 - mqttMultimeter for general MQTT debugging. I guess, a Sparkplug decoder could be added once this library here is up-to-date.
 - MQTTExplorer for general MQTT debugging.
 
- Version 1.3.0 and above: Sparkplug, version 3.0, spAv1.0 (Marked as obsolete) and spBv1.0.
 - Version 1.2.0 and below: Sparkplug, version 2.2, spAv1.0 and spBv1.0.
 
- Version 1.3.4 renames all events from 
SomethingAsynctoSomething. (BREAKING) - Version 1.1.0 introduces the async event pattern and deprecates the "old, synchronous" events, Version 1.2.0+ will remove the old events completely. (BREAKING)
 - You can enable the global setting 
SparkplugGlobals.UseStrictIdentifierCheckingwhich prevents users from using the following chars in identifiers: 
.,\@#$%^&*()[]{}|!`~:;'"<>?
- 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  | 
      OffTravel 💻  | 
      cjmurph 💻  | 
      Bo Biene 💻  | 
      Tim Jöhnk 💻  | 
      Patrick.GK 💻  | 
    
Gerald Asp  | 
      adityashahazilen  | 
      shouidar  | 
    
This project follows the all-contributors specification. Contributions of any kind welcome!