MQT library 0.3.0 for Particle Photon/Spark release. Already can use Web IDE. This release fixed some bug and implement QoS1|2 flag. MQTT V3.1 Protocol Specification is here. MQTT have QoS flag when it send PUBLISH/SUBSCRIBE…etc message. QoS level is following.
QoS 0 Make the message available to any interested parties. QoS 1 Log the message to persistent storage, make it available to any interested parties, and return a PUBACK message to the sender. QoS 2 Log the message to persistent storage, do not make it available to interested parties yet, and return a PUBREC message to the sender.
Previous Photon MQTT library already use QoS 1 when Photon/Particle send message to the MQTT server, but this 0.3.0 release can control the QoS level. If application don’t want to use QoS flag on program, library use QoS 0 level(of cource don’t need to change the source code, if application use before 0.3.0 release library).
Here is How to use QoS1|2 source code.
mqttqostest.ino
#include "MQTT.h" void callback(char* topic, byte* payload, unsigned int length); MQTT client("www.hirotakaster.com", 1883, callback); // recieve message from MQTT server. void callback(char* topic, byte* payload, unsigned int length) { char p[length + 1]; memcpy(p, payload, length); p[length] = NULL; String message(p); if (message.equals("RED")) RGB.color(255, 0, 0); else if (message.equals("GREEN")) RGB.color(0, 255, 0); else if (message.equals("BLUE")) RGB.color(0, 0, 255); else RGB.color(255, 255, 255); delay(1000); } // QoS ack callback. // MQTT server sendback message id ack, if use QOS1 or QOS2. void qoscallback(unsigned int messageid) { Serial.print("Ack Message Id:"); Serial.println(messageid); } void setup() { Serial.begin(9600); RGB.control(true); // connect to the server client.connect("sparkclient"); // add qos callback client.addQosCallback(qoscallback); // publish/subscribe if (client.isConnected()) { // get messageid parameter at 4. // if you want to check the QoS ack response from MQTT server, // store messageid(list or array) and check on "QoS ack callback". uint16_t messageid; // use QoS1 client.publish("/outTopic", "hello world QOS1", MQTT::QOS1, &messageid); Serial.println(messageid); // use QoS2 client.publish("/outTopic", "hello world QOS2", MQTT::QOS2, &messageid); Serial.println(messageid); client.subscribe("/inTopic"); } } void loop() { if (client.isConnected()) client.loop(); }