Hasan Setiawan

Write, write, write give your wings on code!

Follow me on GitHub

Javascript MQTT implementation

MQTT stands for MQ Telemetry Transport. It is a publish/subscribe, extremely simple and lightweight messaging protocol, designed for constrained devices and low-bandwidth, high-latency or unreliable networks.

First of all we want set up a connection to the MQTT Broker. This is done by creating a Messaging.Client Object and calling the connect method with a set of options.

            
//Create a new Client object with your broker's hostname, port and your own clientId
var client = new Messaging.Client(hostname, port, clientid);

var options = {

     //connection attempt timeout in seconds
     timeout: 3,

     //Gets Called if the connection has successfully been established
     onSuccess: function () {
         alert("Connected");
     },

     //Gets Called if the connection could not be established
     onFailure: function (message) {
         alert("Connection failed: " + message.errorMessage);
     }

 };

//Attempt to connect
client.connect(options);
            
          

Subscribing to one or more topics is done by a simple call to the `subscribe` method of the `client`

            
client.subscribe("testtopic", {qos: 2});

//Publishing to a specific topic requires you to create a `Messaging.Message`
//object and pass it to the publish method of the client

var message = new Messaging.Message(payload);
message.destinationName = topic;
message.qos = qos;
client.send(message);
            
          

Full implementation code

            
// js code
//Using the HiveMQ public Broker, with a random client Id
var client = new Messaging.Client("broker.mqttdashboard.com", 8000, "myclientid_" + parseInt(Math.random() * 100, 10));

//Gets  called if the websocket/mqtt connection gets disconnected for any reason
client.onConnectionLost = function (responseObject) {
    //Depending on your scenario you could implement a reconnect logic here
    alert("connection lost: " + responseObject.errorMessage);
};

//Gets called whenever you receive a message for your subscriptions
client.onMessageArrived = function (message) {
    //Do something with the push message you received
    $('#messages').append('Topic: ' + message.destinationName + '  | ' + message.payloadString + '
'); }; //Connect Options var options = { timeout: 3, //Gets Called if the connection has sucessfully been established onSuccess: function () { alert("Connected"); }, //Gets Called if the connection could not be established onFailure: function (message) { alert("Connection failed: " + message.errorMessage); } }; //Creates a new Messaging.Message Object and sends it to the HiveMQ MQTT Broker var publish = function (payload, topic, qos) { //Send your message (also possible to serialize it as JSON or protobuf or just use a string, no limitations) var message = new Messaging.Message(payload); message.destinationName = topic; message.qos = qos; client.send(message); }

            
// html code