Skip to main content

JavaScript Example

Here is javascript (ES6) code example how client can open and use WebSocket connection to receive event data.

WebSocket code example
const api_key = "API-KEY-HERE";
const session_id = "SESSION-ID-HERE";
const network_id = "NETWORK-ID-HERE";
const wire = 1; // can be any positive number..

let socket = null;

function initWebsocketConnection(network_id, session_id) {

if (!socket) {
socket = new WebSocket("wss://door.casambi.com/v1/bridge/", api_key);

initWebsocketListeners(network_id, session_id);

} else {
initWebsocketListeners(network_id, session_id);

}
}

function initWebsocketListeners(network_id, session_id) {

socket.onopen = function () {
sendWireOpenMessage(network_id, session_id);
console.log("Websocket connection opened", network_id);
};

socket.onmessage = function (msg) {

(new Response(msg.data)).text().then(function (result) {
let data = JSON.parse(result);

if ("method" in data && "wire" in data) {
let wire_id = data.wire;

// Some change has occurred in the related network..

if (data.method === "unitChanged") {
console.log("Device state update event, see message data..", data);

} else if (data.method === "networkUpdated") {
console.log("Network updated => fetch network data via REST API..", data);

} else if (data.method === "peerChanged" && !data.online) {
console.log("Peer updated => device(s) online status in the network..", data);

}

} else if ("wireStatus" in data && data.wireStatus === "openWireSucceed") {
console.log("WebSocket wire connection opened successfully! Ref:" + data.ref, data);
sendPingMessage(network_id);

} else if ("response" in data && data.response === "pong") {
console.log("WebSocket keep-alive message (ping) response received (pong)..", data);

// Note: device, group and scene ID's are int values..
let device_id = 1; // DEVICE-ID
let devices = [1, 2]; // [DEVICE-ID-A, DEVICE-ID-B]
let group_id = 1; // GROUP-ID
let scene_id = 1; // SCENE-ID

let controls = {
"Dimmer": {
"value": 0.75
}
};
sendUnitControlMessage(device_id, controls);

controls["Dimmer"]["value"] = 0.5;
sendUnitsControlMessage(devices, controls);

let value = 0.25;
sendGroupControlMessage(group_id, value);

value = 0;
sendSceneControlMessage(scene_id, value);

value = 1;
sendNetworkControlMessage(value);

}

}, function (error) {
console.log(error);
});

};

socket.onerror = function (error) {
console.log("WebSocket Error:", error);

// On websocket error create new websocket connection to keep the connection alive..
initWebsocketConnection(network_id, session_id);

};

socket.onclose = function () {
socket = null;

console.log("Websocket closed!");

// On websocket close create new websocket connection to keep the connection alive..
initWebsocketConnection(network_id, session_id);

// Note: Websocket connection will close after 5 minutes of inactivity.
// To keep the websocket connection alive send ping message to server every 4 minutes or so..

};

}

function sendWireOpenMessage (network_id, session_id) {
let reference = "REFERENCE-STRING-HERE";
let wire_id = wire;

const data = JSON.stringify({
"method": "open",
"id": network_id,
"session": session_id,
"ref": reference,
"wire": wire_id, // transient connection ID, unique for network
"type": 1, // FRONTEND
});

socket.send(decodeURIComponent(escape(data)));
}

function sendPingMessage(network_id) {
let wire_id = wire;

const data = JSON.stringify({
"wire": wire_id,
"method": "ping"
});

socket.send(decodeURIComponent(escape(data)));
}

function sendUnitsControlMessage(devices, targetControls) {
let wire_id = wire;

const data = JSON.stringify({
"wire": wire_id,
"method": "controlUnits",
"targetControls": targetControls,
"ids": devices
});

socket.send(decodeURIComponent(escape(data)));
}

function sendUnitControlMessage(device_id, targetControls) {
let wire_id = wire;

const data = JSON.stringify({
"wire": wire_id,
"method": "controlUnit",
"id": parseInt(device_id),
"targetControls": targetControls
});

socket.send(decodeURIComponent(escape(data)));
}

function sendGroupControlMessage(group_id, value) {
let wire_id = wire;

const data = JSON.stringify({
"wire": wire_id,
"method": "controlGroup",
"id": parseInt(group_id),
"level": value
});

socket.send(decodeURIComponent(escape(data)));
}

function sendSceneControlMessage(scene_id, value) {
let wire_id = wire;

const data = JSON.stringify({
"wire": wire_id,
"method": "controlScene",
"id": parseInt(scene_id),
"level": value
});

socket.send(decodeURIComponent(escape(data)));
}

function sendNetworkControlMessage(value) {
let wire_id = wire;

const data = JSON.stringify({
"wire": wire_id,
"method": "controlNetwork",
"level": value
});

socket.send(decodeURIComponent(escape(data)));
}

initWebsocketConnection(network_id, session_id);