Adding real time using Socket.IO
Using the socket.IO library, create a simple real-time widget with Ubidots and the HTML Canvas.
<p id="content"></p>var socket;
var srv = window.location.hostname + ":443"; //this allows the widget to work at the white label level
var VAR_ID = "variable-id"; // Put here your var Id
var TOKEN = "YOUR-TOKEN" // Put here your token
$(document).ready(function () {
// Implements the connection to the server
socket = io.connect("https://" + srv, { path: '/notifications' });
var subscribedVars = [];
// Function to publish the variable ID
var subscribeVariable = function (variable, callback) {
// Publishes the variable ID that wishes to listen
socket.emit('rt/variables/id/last_value', {
variable: variable
});
// Listens for changes
socket.on('rt/variables/' + variable + '/last_value', callback);
subscribedVars.push(variable);
};
// Function to unsubscribed for listening
var unSubscribeVariable = function (variable) {
socket.emit('unsub/rt/variables/id/last_value', {
variable: variable
});
var pst = subscribedVars.indexOf(variable);
if (pst !== -1) {
subscribedVars.splice(pst, 1);
}
};
var connectSocket = function () {
// Implements the socket connection
socket.on('connect', function () {
socket.emit('authentication', { token: TOKEN });
});
window.addEventListener('online', function () {
socket.emit('authentication', { token: TOKEN });
});
socket.on('authenticated', function () {
subscribedVars.forEach(function (variable_id) {
socket.emit('rt/variables/id/last_value', { variable: variable_id });
});
});
}
/* Main Routine */
connectSocket();
// Should try to connect again if connection is lost
socket.on('reconnect', connectSocket);
// Subscribe Variable with your own code.
subscribeVariable(VAR_ID, function (value) {
var parsedValue = JSON.parse(value);
console.log(parsedValue);
$('#content').text(value);
})
});
Last updated
Was this helpful?