Tag quality via SparkPlug

Our company is implementing an embedded device which generates SparkPlug MQTT traffic directly, and we cannot use Ignition Edge or the Cirrus Link MQTT Transmission module. We have come across use cases where we would like to flag individual metrics as bad w/o having to DDEATH an entire sub-device. From watching test setups and discussion w/ Cirrus Link, I know that Ignition Edge does this via the “Quality” property on a metric, which is not a standard part of the SparkPlug protocol and is Ignition-specific. Having said that, we expect most of our customer base will be Ignition users and there is value in our device imitating this particular property.

Unfortunately, we haven’t seen a solid definition of the “Quality” values that Ignition will fully understand. We found this and this in the manual which seem close, but don’t totally line up with what we’re seeing. For one thing, we’ve discovered that the actual value in the SparkPlug payload uses the highest bit (0x80000000) as a flag to differentiate BAD from GOOD. Sending a value from one of those tables in the manual but with the wrong flag causes it to show oddly like “Good(512)” or “Bad(-2147483456)”.

More confusingly, some of the values in those tables get decoded into values like “Bad_Stale” while others just show up as “Bad(111)”.

Is there a definitive list somewhere or guideline to which SparkPlug Quality property values Ignition will fully decode into string values instead of just “Good(x)” or “Bad(x)”?

For anyone who’s search lands them here first, there’s an answer over here: