Mqtt engine and QoS

I am testing mqtt engine module. I want to understand how this module subscribes a topic on broker.
mqtt specifics define three level of QoS:

  • At most once (0)
  • At least once (1)
  • Exactly once (2)

What qos is used in mqtt engine module? Is it possible to change?


I believe they use QoS 0 (at most once) and it is not configurable. @wes0johnson can confirm maybe.

Kevin is correct - all MQTT Engine subscriptions for Sparkplug topics are on QoS0 per the Sparkplug specification.

this for the sparkplug namespace, instead for another namespace or a custom one?
Is it possible to have certainty to receive all messages in the case of connection problems
Thank you

The following is only true for MQTT Engine 3.4.10 or later for Ignition7 and 4.0.4 or later for Ignition8.

We do support QoS1 for custom namespaces. These are the instructions to enable:

  • In MQTT Engine ‘General’ Configuration set ‘Custom Properties’ to be the following string: {"allowCustomNamespacesQos1":true}

  • After setting the Custom Property above, two new configuration options will appear:

    • MQTT Engine → Servers (new/edit Server) → Advanced → Clean Session
    • MQTT Engine → Namespaces → Custom (new/edit namespace) → Optional → QoS1
  • To allow MQTT Engine to subscribe on QoS1 with cleanSession=false, set the following:

    • In the Server configuration of Engine, make sure the ‘Client ID’ is set to something unique and non-null under the advanced section. This is required for cleanSession=false MQTT Sessions to ensure auto-generated client IDs are not used which would change across sessions.
    • In the Server configuration of Engine, set ‘Clean Session’ to ‘false’ under the advanced section.
    • In the Custom Namespace configuration, set the QoS1 to ‘true’

    Note if QoS1 is set on a custom namespace and either clientID is not set or cleanSession=true, a warning will be logged and Engine will subscribe at QoS0 for the custom namespace.

1 Like

I have configured the new options, but it doesn’t seem to work yet. I lost the message when the broker is not accessible.


I do have some thing similar doubt with MQTT engine.
I am using this following function

system.cirruslink.engine.publish(String serverName, String mqttTopic, byte[] payload, int qos, boolean retain)

Where I have used 2 for QoS.

  1. Is that right? Will this work?
  2. How to verify this?
  3. In this page
    I think they didn’t mentioned what this function will return.
  4. I need to visually convey that each has been delivered, How to do it?


Bump this thread - has anyone gotten the QoS 1 to work? I followed Wes’ suggestion on the additions that need to be made to engine, but it is still reporting a QoS of 0. Any help would be appreciated.

I got it working by following @wes0johnson instructions, using Ignition v7.9.18 and Engine v3.4.12.

Beware when copy/pasting Wes’s string in the Custom Properties section: because of the formatting used on the forum, the double-quotes are not properly written and the configuration options for QoS1 do not appear.

This should do the trick:


Has this been updated since to allow for QoS 2 to be used?