Register a handler for completed connections
Agent
Name | Type | Description |
---|---|---|
callback | Function |
Optional function to be called upon completion of a connection attempt
|
Nothing
This method allows you to register a function that will be called whenever an attempt to connect to an MQTT broker (see mqttclient.connect()) completes, whether successfully or not.
The provided function must have one parameter of its own: resultCode. This will be passed an integer indicating the state of the connection:
Value | Description |
---|---|
-1 | Socket error: an incorrect URL/port/firewall/SSL issue, etc. |
0 | Success: the connected was accepted |
1 | Connection refused: the server does not support MQTT 3.1.1 |
2 | Connection refused: the client ID was rejected |
3 | Connection refused: the server is unavailable |
4 | Connection refused: an incorrect username or password was provided |
5 | Connection refused: access was not authorized for some other reason |
Only one callback function may be registered at any one time. To clear a previously registered callback, either provide a new function, or pass in null
.
Note Inbound and Outbound MQTT requests and messages are subject to rate limits.
The following code sets up an MQTT client and connects to the specified MQTT broker. The outcome of the connection attempt is handled by the function registered using mqttclient.onconnect(): it checks the value passed into resultCode and reports accordingly. If the connection is made, the code attempts to subscribe to a topic.
// CONSTANTS
const URL = "tcp://test.mosquitto.org";
const PORT = 1883;
const UN = "generalgrugger";
const PW = "gaztakh1ghc0mmand";
// GLOBALS
local client = null;
local cid = "imp.mqtt.test." + imp.configparams.deviceid;
// FUNCTIONS
function error(code) {
switch (code) {
case -1: return "Socket Error";
case 1: return "Unsupported MQTT version";
case 2: return "Client ID rejected";
case 3: return "Server unavailable";
case 4: return "Invalid username/password";
case 5: return "Not authorized";
default: return "Unknown error";
}
}
function onMessage(message) {
// Called on receipt of a message
server.log("Message \'" + message.message + "\' received under topic \'" + message.topic + "\'");
}
function onConnect(resultCode) {
// Called when the client connects (or fails to connect) to the MQTT broker
local s = URL + ":" + PORT.tostring();
if (resultCode == 0) {
server.log("Connected to " + s);
// We're connected to try to subscribe to a topic
client.subscribe("imp.mqtt.test.pings",
mqtt.AT_MOST_ONCE,
function(qosMode) {
// This is the subscription acknowledgement callback
if (qosMode != 0x80) {
client.onmessage(onMessage);
}
});
} else {
server.error("Failed to connect to " + s + ". Error: " + error(resultCode));
}
}
// RUNTIME START
// Instance an MQTT client
client = mqtt.createclient();
// Set up the initial handlers
client.onconnect(onConnect);
// Connect with credentials
local options = {};
options.username <- UN;
options.password <- PW;
client.connect(URL + ":" + PORT.tostring(), cid, options);