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);