JavaScript Examples
Here are javascript (ES6) code examples how client can authenticate and then use API endpoints to receive information.
Axios
Example code uses axios for API requests. More information: https://github.com/axios/axios.
Creating (site) user session
const api_key = "API-KEY-HERE";
const login = {
"email": "EMAIL-ADDRESS-HERE",
"password": "PASSWORD-HERE",
};
axios.post("https://door.casambi.com/v1/users/session/", { ...login }, {
headers: { "X-Casambi-Key": api_key }
}).then(response => {
console.log(response.data);
const session_data = response.data;
const session_id = session_data.sessionId;
for (let network in session_data) {
const network_id = network.id;
const network_name = network.name;
}
for (let site in session_data) {
const networks = site.networks;
}
// Use session_id for further API requests..
}).catch(error => {
console.log(error);
if (error.response && error.response.status === 401) {
if ("statusText" in error.response
&& error.response.statusText === "Api authorization failed.") {
// Given API key is invalid!
} else {
// User not found!
}
} else if (error.response) {
// See error.response && status
}
});
Creating network (admin) session
const api_key = "API-KEY-HERE";
const login = {
"email": "EMAIL-ADDRESS-HERE",
"password": "PASSWORD-HERE",
};
axios.post("https://door.casambi.com/v1/networks/session/", { ...login }, {
headers: { "X-Casambi-Key": api_key }
}).then(response => {
console.log(response.data);
const network_session_data = response.data;
for (let network_id in network_session_data) {
const session_id = network_session_data[network_id].sessionId;
const network_name = network_session_data[network_id].name;
// Use session_id for further API requests..
}
}).catch(error => {
console.log(error);
if (error.response && error.response.status === 401) {
if ("statusText" in error.response
&& error.response.statusText === "Api authorization failed.") {
// Given API key is invalid!
} else {
// Network user not found!
}
} else if (error.response) {
// See error.response && status
}
});
Fetch network information
const api_key = "API-KEY-HERE";
const session_id = "SESSION-ID-HERE";
const network_id = "NETWORK-ID-HERE";
axios.get("https://door.casambi.com/v1/networks/" + network_id, {
headers: { "X-Casambi-Session": session_id, "X-Casambi-Key": api_key }
}).then(response => {
console.log(response.data);
const network = response.data;
const network_id = network.id;
const network_name = network.name;
const devices = network.units;
const groups = network.groups;
const scenes = network.scenes;
// network info including information about groups, devices, scenes (if any)..
}).catch(error => {
console.log(error);
});
Fetch unit state
const api_key = "API-KEY-HERE";
const session_id = "SESSION-ID-HERE";
const network_id = "NETWORK-ID-HERE";
const device_id = "DEVICE-ID-HERE";
axios.get("https://door.casambi.com/v1/networks/" + network_id + "/units/" + device_id + "/state", {
headers: { "X-Casambi-Session": session_id, "X-Casambi-Key": api_key }
}).then(response => {
console.log(response.data);
const device = response.data;
const device_id = device.id;
const device_status = device.status;
const device_dim_level = device.dimLevel;
const device_controls = device.controls;
// device info including information about status, fixture, controls (dim, color temperature, color etc. if any)..
}).catch(error => {
console.log(error);
});
Fetch network state
const api_key = "API-KEY-HERE";
const session_id = "SESSION-ID-HERE";
const network_id = "NETWORK-ID-HERE";
axios.get("https://door.casambi.com/v1/networks/" + network_id + "/state", {
headers: { "X-Casambi-Session": session_id, "X-Casambi-Key": api_key }
}).then(response => {
console.log(response.data);
const network = response.data;
const network_id = network.id;
const network_name = network.name;
const devices = network.units;
const groups = network.groups;
const scenes = network.scenes;
const dim_level = network.dimLevel;
const active_scene_ids = network.activeScenes;
for (let device in devices) {
const device_id = device.id;
const device_status = device.status;
const device_dim_level = device.dimLevel;
const device_controls = device.controls;
// device info including information about status, fixture, controls (dim, color temperature, color etc. if any)..
}
// network info including information about groups, device states, scenes (if any)..
}).catch(error => {
console.log(error);
});
Fetch datapoints
const api_key = "API-KEY-HERE";
const session_id = "SESSION-ID-HERE";
const network_id = "NETWORK-ID-HERE";
// Note that filter options are mandatory for datapoints requests. In addition optional units value can be used as well.
// Time range and datatype (or keys) value must be given. Note that datapoint data is stored only for 60 days.
// Time range parameters and response time values are always in UTC.
const filter_options = {
"dataType": "control,status",
"keys": "dimmer,lux",
"units": "15,22",
"from": 201907221013,
"to": 201907290431,
"limit": 20000
};
const query_params = Object.keys(filter_options).map(key => key + '=' + encodeURIComponent(filter_options[key])).join('&');
axios.get("https://door.casambi.com/datapoints/networks/" + network_id + "/datapoints?" + query_params, {
headers: { "X-Casambi-Session": session_id, "X-Casambi-Key": api_key }
}).then(response => {
console.log(response.data);
const datapoints = response.data;
// Datapoints result in JSON object, please refer to the Response Example in the endpoint definition for more info...
}).catch(error => {
console.log(error);
});
Fetch image
const api_key = "API-KEY-HERE";
const session_id = "SESSION-ID-HERE";
const network_id = "NETWORK-ID-HERE";
const image_id = "IMAGE-ID-HERE";
axios.get("https://door.casambi.com/v1/networks/" + network_id + "/images/" + image_id, {
headers: { "X-Casambi-Session": session_id, "X-Casambi-Key": api_key}, "responseType": "arraybuffer"
}).then(response => {
console.log(response.data);
const bytes = new Uint8Array(response.data);
const binary = bytes.reduce((data, byte) => data + String.fromCharCode(byte), '');
const image_src = "data:image/png;base64," + btoa(binary);
// use image_src to show the image with img html element..
}).catch(error => {
console.log(error);
});
XmlHttp
Example code uses XmlHttp for API requests. More information: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.
Creating (site) user session
const api_key = "API-KEY-HERE";
const login = {
"email": "EMAIL-ADDRESS-HERE",
"password": "PASSWORD-HERE",
};
const xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "https://door.casambi.com/v1/users/session", "true");
xmlhttp.setRequestHeader("X-Casambi-Key", api_key);
xmlhttp.setRequestHeader("Content-Type", "application/JSON");
xmlhttp.onload = function () {
console.log(JSON.parse(this.responseText), this.status, this.statusText);
const user_session_data = JSON.parse(this.responseText);
const session_id = user_session_data.sessionId;
for (let network in user_session_data) {
const network_id = network.id;
const network_name = network.name;
}
for (let site in user_session_data) {
const networks = site.networks;
}
};
xmlhttp.send(JSON.stringify(login));
Creating network (admin) session
const api_key = "API-KEY-HERE";
const login = {
"email": "EMAIL-ADDRESS-HERE",
"password": "PASSWORD-HERE",
};
const xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "https://door.casambi.com/v1/networks/session", "true");
xmlhttp.setRequestHeader("X-Casambi-Key", api_key);
xmlhttp.setRequestHeader("Content-Type", "application/JSON");
xmlhttp.onload = function () {
console.log(JSON.parse(this.responseText), this.status, this.statusText);
const network_session_data = JSON.parse(this.responseText);
for (let network_id in network_session_data) {
const session_id = network_session_data[network_id].sessionId;
const network_name = network_session_data[network_id].name;
// Use session_id for further API requests..
}
};
xmlhttp.send(JSON.stringify(login));
Fetch network information
const api_key = "API-KEY-HERE";
const session_id = "SESSION-ID-HERE";
const network_id = "NETWORK-ID-HERE";
const xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "https://door.casambi.com/v1/networks/" + network_id);
xmlhttp.setRequestHeader("X-Casambi-Session", session_id);
xmlhttp.setRequestHeader("X-Casambi-Key", api_key);
xmlhttp.onload = function () {
console.log(JSON.parse(this.responseText), this.status, this.statusText);
const network = JSON.parse(this.responseText);
const network_id = network.id;
const network_name = network.name;
const devices = network.units;
const groups = network.groups;
const scenes = network.scenes;
// network info including information about groups, devices, scenes (if any)..
};
xmlhttp.send();
Fetch unit state
const api_key = "API-KEY-HERE";
const session_id = "SESSION-ID-HERE";
const network_id = "NETWORK-ID-HERE";
const device_id = "DEVICE-ID-HERE";
const xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "https://door.casambi.com/v1/networks/" + network_id + "/units/" + device_id + "/state");
xmlhttp.setRequestHeader("X-Casambi-Session", session_id);
xmlhttp.setRequestHeader("X-Casambi-Key", api_key);
xmlhttp.onload = function () {
console.log(JSON.parse(this.responseText), this.status, this.statusText);
const device = JSON.parse(this.responseText);
const device_id = device.id;
const device_status = device.status;
const device_dim_level = device.dimLevel;
const device_controls = device.controls;
// device info including information about status, fixture, controls (dim, color temperature, color etc. if any)..
};
xmlhttp.send();
Fetch network state
const api_key = "API-KEY-HERE";
const session_id = "SESSION-ID-HERE";
const network_id = "NETWORK-ID-HERE";
const xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "https://door.casambi.com/v1/networks/" + network_id + "/state");
xmlhttp.setRequestHeader("X-Casambi-Session", session_id);
xmlhttp.setRequestHeader("X-Casambi-Key", api_key);
xmlhttp.onload = function () {
console.log(JSON.parse(this.responseText), this.status, this.statusText);
const network = JSON.parse(this.responseText);
const network_id = network.id;
const network_name = network.name;
const devices = network.units;
const groups = network.groups;
const scenes = network.scenes;
const dim_level = network.dimLevel;
const active_scene_ids = network.activeScenes;
for (let device in devices) {
const device_id = device.id;
const device_status = device.status;
const device_dim_level = device.dimLevel;
const device_controls = device.controls;
// device info including information about status, fixture, controls (dim, color temperature, color etc. if any)..
}
// network info including information about groups, device states, scenes (if any)..
};
xmlhttp.send();
Fetch datapoints
const api_key = "API-KEY-HERE";
const session_id = "SESSION-ID-HERE";
const network_id = "NETWORK-ID-HERE";
// Note that filter options are mandatory for datapoints requests. In addition optional units value can be used as well.
// Time range and datatype (or keys) value must be given. Note that datapoint data is stored only for 60 days.
// Time range parameters and response time values are always in UTC.
const filter_options = {
"dataType": "control,status",
"keys": "dimmer,lux",
"units": "15,22",
"from": 201907221013,
"to": 201907290431,
"limit": 20000
};
const query_params = Object.keys(filter_options).map(key => key + '=' + encodeURIComponent(filter_options[key])).join('&');
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "https://door.casambi.com/datapoints/networks/" + network_id + "/datapoints?" + query_params);
xmlhttp.setRequestHeader("X-Casambi-Session", session_id);
xmlhttp.setRequestHeader("X-Casambi-Key", api_key);
xmlhttp.onload = function () {
console.log(JSON.parse(this.responseText), this.status, this.statusText);
const datapoints = JSON.parse(this.responseText);
// Datapoints result in JSON object, please refer to the Response Example in the endpoint definition for more info...
};
xmlhttp.send();
Fetch image
const api_key = "API-KEY-HERE";
const session_id = "SESSION-ID-HERE";
const network_id = "NETWORK-ID-HERE";
const image_id = "IMAGE-ID-HERE";
const xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "https://door.casambi.com/v1/networks/" + network_id + "/images/" + image_id);
xmlhttp.setRequestHeader("X-Casambi-Session", session_id);
xmlhttp.setRequestHeader("X-Casambi-Key", api_key);
xmlhttp.responseType = "arraybuffer";
xmlhttp.onload = function () {
console.log(this.response, this.status, this.statusText);
const bytes = new Uint8Array(this.response);
const binary = bytes.reduce((data, byte) => data + String.fromCharCode(byte), '');
const image_src = "data:image/png;base64," + btoa(binary);
// use image_src to show the image with img html element..
};
xmlhttp.send();