// Function to request the Domoboard API
function requestAPI(url, callback) {
$.ajax({
type: 'POST',
url: url,
data: { _csrf_token: csrf_token },
success: function (data) {
if (typeof callback === "function"){
callback(data);
}
},
async:true
});
}
// Switch functions
function changeSwitch(checkboxElem, idx) {
if (checkboxElem.checked) {
requestAPI(flask_server + "/api?type=command¶m=switchlight&idx=" + idx + "&switchcmd=On" );
} else {
requestAPI(flask_server + "/api?type=command¶m=switchlight&idx=" + idx + "&switchcmd=Off" );
}
}
// Dimmer functions
function changeDimmer(checkboxElem, idx) {
var chkurl = "/api?type=devices&rid=" + idx;
requestAPI(flask_server + chkurl, function(d) {
_json = JSON.parse(d);
if (_json['result'][0]['Data'] != 'Off') {
requestAPI(flask_server + "/api?type=command¶m=switchlight&idx=" + idx + "&switchcmd=Off&level=0");
} else {
requestAPI(flask_server + "/api?type=command¶m=switchlight&idx=" + idx + "&switchcmd=On&level=0");
}
setDimmerState(checkboxElem, idx);
});
}
function setDimmerState(id, idx) {
var url = "/api?type=devices&rid=" + idx;
requestAPI(flask_server + url, function(d) {
_json = JSON.parse(d);
if (_json['result'][0]['Data'] != 'Off') {
$('#' + id).css({'background-image': '-webkit-linear-gradient(top, #f9f9f9 0%, green 100%)', 'background-image': '-o-linear-gradient(top, #f9f9f9 0%, green 100%)', 'background-image': 'linear-gradient(to bottom, #f9f9f9 0%, green 100%)'});
} else {
$('#' + id).css({'background-image': '-webkit-linear-gradient(top, #f9f9f9 0%, #f5f5f5 100%)', 'background-image': '-o-linear-gradient(top, #f9f9f9 0%, #f5f5f5 100%)', 'background-image': 'linear-gradient(to bottom, #f9f9f9 0%, #f5f5f5 100%)'});
}
});
}
// Switch functions
function changePush(idx, action) {
if (action == 'on') {
requestAPI(flask_server + "/api?type=command¶m=switchlight&idx=" + idx + "&switchcmd=On" );
} else {
requestAPI(flask_server + "/api?type=command¶m=switchlight&idx=" + idx + "&switchcmd=Off" );
}
}
function changeScene(idx, action) {
if (action == 'on') {
requestAPI(flask_server + "/api?type=command¶m=switchscene&idx=" + idx + "&switchcmd=On" );
} else {
requestAPI(flask_server + "/api?type=command¶m=switchscene&idx=" + idx + "&switchcmd=Off" );
}
}
function refreshSwitches(updateSwitches, block) {
$.each(updateSwitches, function (i, switchID) {
var url = flask_server + "/api?type=devices&rid=" + switchID;
var clickCheckbox = document.getElementById("switch_" + switchID + "_block_" + block);
$('input[id="'+ "switch_" + switchID + "_block_" + block + '"]').bootstrapSwitch();
var val = $('input[id="'+ "switch_" + switchID + "_block_" + block + '"]').bootstrapSwitch('state');
requestAPI(url, function(d){
var data = JSON.parse(d);
if ((val == false) && (data.result[0].Data != "Off")) {
$('input[id="'+ "switch_" + switchID + "_block_" + block + '"]').bootstrapSwitch('state', true, true);
} else if ((val == true) && (data.result[0].Data == "Off")) {
$('input[id="'+ "switch_" + switchID + "_block_" + block + '"]').bootstrapSwitch('state', false, true);
}
});
});
}
// Top tiles functions
function refreshTopTiles(updateDivs, block, tilesPreviousArray, updateDivsTypeArray) {
if (tilesPreviousArray.length == 0) {
for(var i = 0; i < updateDivs.length; i++){
tilesPreviousArray.push(-1);
}
}
var i = 0;
$.each(updateDivs, function (i, divID) {
var url = flask_server + "/api?type=devices&rid=" + divID;
requestAPI(url, function(d) {
var obj = JSON.parse(d);
if (obj.result != undefined) {
var data = obj.result[0][updateDivsTypeArray[i]];
} else {
var data = "-";
}
var re = /(-?\d+\.?\d*) (.+)/;
tilesArray = re.exec(data);
if (tilesArray != null) {
if (tilesArray[1] < tilesPreviousArray[i]) {
$("#" + block + divID).html(tilesArray[1] + "" + tilesArray[2] + " ");
tilesPreviousArray[i] = tilesArray[1];
} else if (tilesArray[1] > tilesPreviousArray[i]) {
$("#" + block + divID).html(tilesArray[1] + "" + tilesArray[2] + " ");
tilesPreviousArray[i] = tilesArray[1];
}
} else {
$("#" + block + divID).html(data);
}
if(data == "On") {
$("#" + block + divID).removeClass("red");
$("#" + block + divID).addClass("green");
} else if(data == "Off") {
$("#" + block + divID).removeClass("green");
$("#" + block + divID).addClass("red");
} else {
$("#" + block + divID).removeClass("green");
$("#" + block + divID).removeClass("red");
}
});
i = i++;
});
return tilesPreviousArray;
}
// Power usage functions
function refreshPowerUsage(updatePowerUsage, block) {
var calcTotalArray = [];
var total = 0;
$.each(updatePowerUsage, function(i, powerUsageID) {
var url = flask_server + "/api?type=devices&rid=" + powerUsageID;
requestAPI(url, function(d){
var obj = JSON.parse(d);
$("#power_usage_" + powerUsageID + "_" + block).html(obj.result[0].Data);
calcTotalArray.push(obj.result[0].Data.replace(" kWh", ""));
$.each(calcTotalArray,function(){total+=parseFloat(this) || 0; });
$("#" + "power_usage_total_" + block).html("" + total.toFixed(3) + " kWh");
});
});
}
// Map functions
function refreshMapLocation(idx, iframe) {
var iframe = $('#' + iframe);
var url = flask_server + "/api?type=devices&rid=" + idx;
requestAPI(url, function(d) {
var data = JSON.parse(d);
var locurl = "https://www.google.com/maps/embed/v1/place?key=" + googleMapEmbedKey + "&q=" + encodeURIComponent(data.result[0].Data) + "&maptype=satellite";
iframe.attr('src',locurl);
});
}
// Dimmers functions
function dimmerSlider(updateDimmers, block) {
$.each(updateDimmers, function(i, dimmerID) {
url = "/api?type=devices&rid=" + dimmerID;
requestAPI(url, function(d) {
var percentage = JSON.parse(d).result[0].Level;
$('#dimmer_' + dimmerID + "_block_" + block).slider({min:0, max:100, value: percentage}).on('slideStop', function(ev) {
setDimmerState('dim_' + dimmerID + "_block_" + block + "_track", dimmerID);
changeDimmerSlider($(this).attr('id'), ev.value) } ).data('slider');
$('#dimmer_' + dimmerID + "_block_" + block).slider().on('slideStop', function(ev) {
setDimmerState('dim_' + dimmerID + "_block_" + block + "_track", dimmerID);
changeDimmerSlider($(this).attr('id'), ev.value)
} ).data('slider');
setDimmerState('dim_' + dimmerID + "_block_" + block + "_track", dimmerID);
});
});
}
function changeDimmerSlider(idx, value) {
var re = /dimmer_(\d+)_block_\d+/;
match = re.exec(idx);
ridx = match[1];
requestAPI(flask_server + "/api?type=command¶m=switchlight&idx=" + ridx + "&switchcmd=Set%20Level&level=" + value);
}
// RGB functions
function changeRgbColor(idx) {
var re = /rgb_(\d+)_block_\d+/;
match = re.exec(idx);
ridx = match[1];
var rgb = $("#" + idx).data('colorpicker').color;
var rgbcode = rgb.toHex();
var rgbcode_stripped = rgbcode.substring(1);
requestAPI(flask_server + "/api?type=command¶m=setcolbrightnessvalue&idx=" + ridx + "&hex=" + rgbcode_stripped);
}
// Chart functions
function redrawLineChart(sensor, idx, range, block) {
var url = "/api?type=graph&sensor=" + sensor + "&idx=" + idx + "&range=" + range;
requestAPI(url, function(d){
block.setData(JSON.parse(d).result);
});
}
function redrawBarChart(idxs, block, barChartElementsNames) {
var url = "/api?custom=bar_chart&idxs=" + idxs.join();
var i = 0;
requestAPI(url, function(d){
var data = JSON.parse(d);
for (var key in data) {
data[key]["l"] = barChartElementsNames[i];
i++;
}
block.setData(data);
});
}
function redrawDonutChart(idxs, block) {
var url = "/api?custom=donut_chart&idxs=" + idxs.join();
requestAPI(url, function(d){
block.setData(JSON.parse(d));
});
}
function redrawAreaChart(sensor, idx, range, block) {
var url = "/api?type=graph&sensor=" + sensor + "&idx=" + idx + "&range=" + range;
requestAPI(url, function(d) {
block.setData(JSON.parse(d).result);
});
}
// Log functions
function RefreshLogData() {
clearInterval($.refreshTimerGraph);
var url = flask_server + "/api?type=command¶m=getlog";
requestAPI((url), function(d) {
var data = JSON.parse(d);
var arrData = [];
$.each(data.result, function(i, item) {
var x = [item['level'], item['message']];
arrData.push(x);
});
var filter = document.getElementById('filterlog').value;
var text = "";
for (i = (arrData.length - 1); i > 0; i--) {
var totalText = arrData[i][1];
var lowerText = totalText.toLowerCase();
if (filter.length <= 0 || lowerText.indexOf(filter.toLowerCase()) >= 0) {
var res = totalText.split(" ");
text += "" + res[0] + " " + res[1] + " ";
totalText = totalText.replace(res[0] + " " + res[1], "")
.replace("User:", "User: ")
.replace("LUA:", "LUA: ")
.replace("Hardware Monitor", "Hardware Monitor: ")
.replace("Error:", "Error: ")
.replace("EventSystem", "EventSystem: ")
text += totalText;
text += "
";
}
}
$('#showlog').html(text);
});
$.refreshTimerGraph = setInterval(RefreshLogData, 2000);
}
// Settings functions
function retrieveAvailableDevices() {
var url = flask_server + "/api?type=devices&filter=all&used=true&order=Name";
requestAPI(url, function(d){
var data = JSON.parse(d);
var arrData = [];
$.each(data.result, function(i, item) {
var x = [item['idx'], item['Name']];
arrData.push(x);
});
var text = '
| Idx | Name | Displayed on | Add |
|---|---|---|---|
| " + idx + " | " + name + ' | '; text += ' |