async function geturl(url){
return new Promise((resolve, reject) =>{
$.ajax({
method: 'get',
url: url,
processData: true,
dataType: 'json',
success: function(data){
resolve(data);
return;
},
error: function(err){
console.log(JSON.stringify(err));
console.log(err.toString());
reject(err);
}
});
});
}
async function posturl(url, body){
return new Promise((resolve, reject) =>{
$.ajax({
method: 'post',
url: url,
processData: true,
data: JSON.stringify(body),
dataType: 'json',
success: function(data){
resolve(data);
return;
},
error: function(err){
console.log(JSON.stringify(err));
console.log(err.toString());
reject(err);
}
});
});
}
var settings = null;
async function pageload(){
// Get status
settings = await geturl('/settings');
console.log('settings: ' + JSON.stringify(settings));
setInterval(fetchState,60000);
await fetchProducts();
await fetchState();
}
async function fetchState(){
var token = await geturl('/token');
$('#access_token').text(token.access_token);
$('#token_created').text(token.created);
$('#token_expires').text(token.expires);
if ( settings && settings.energy_sites){
for(var s in settings.energy_sites){
if ( settings.energy_sites[s].live){
var status = await geturl('/live_status/' + s);
var body = '';
for(var k in status){
body += '
' + k + ' | ' + JSON.stringify(status[k]) + ' |
';
if ( s === settings.active_site && k === 'percentage_charged'){
$('#soc').text(Math.round(status[k]*10)/10);
}
}
$('#' + s + '_live').html(body);
}
}
}
await fetchOperational();
}
async function fetchOperational(){
var operational = await geturl('/operational');
console.log('Operational: ' + JSON.stringify(operational));
$('#backup_reserve').val(operational.backup_reserve);
}
function isObject(obj) {
return obj === Object(obj);
}
function showtable(id){
var display = $('#' + id).css('display');
if ( display === 'none'){
$('#' + id).css({display:'block'});
$('#' + id + '_btn').text('-');
} else {
$('#' + id).css({display:'none'});
$('#' + id + '_btn').text('+');
}
}
async function set_backup(){
console.log('set_backup');
var v = $('#backup_reserve').val();
console.log('New backup reserve ' + v);
var body = {
energy_site_id: parseInt(settings.active_site),
backup_reserve_percent: parseFloat(v)
};
await posturl('/backup',body);
await fetchProducts();
}
async function fetchProducts(){
var products = await geturl('/products');
var body = 'Energy Site ID | Type | Site Name | ID | gateway | asset_site_id |
';
for(var product of products){
body += '';
body += '' + product.energy_site_id + ' | ';
body += '' + product.resource_type + (product.resource_type === 'battery' ? ' ' + product.battery_type : '') + ' | ';
body += '' + product.site_name + ' | ';
body += '' + product.id + ' | ';
body += '' + product.gateway_id + ' | ';
body += '' + product.asset_site_id + ' | ';
body += '';
// body += JSON.stringify(product);
body += ' | ';
// id
body += '
';
if ( settings && settings.energy_sites){
console.log('settings.energy_sites: ' + JSON.stringify(settings.energy_sites));
if ( settings.energy_sites[product.energy_site_id].live){
body += 'Live settings | ';
body += '';
id = product.energy_site_id + '_live';
body += ''
body += ' | ';
body += '
'
body += '';
body += 'Site info | ';
body += '';
body += '';
var site_info = await geturl('/energy_site_info/' + product.energy_site_id);
//body += '';
//body += JSON.stringify(status);
//body += ' | ';
for( var key in site_info){
body += '';
body += '' + key + ' | ';
if ( isObject(site_info[key])){
var id = product.energy_site_id + '_' + key;
body += '';
body += '';
var item = site_info[key];
for(var k in item){
body += '' + k + ' | ';
body += JSON.stringify(item[k]);
body += ' | ';
}
body += ' ';
} else {
body += JSON.stringify(site_info[key]);
}
body += ' | ';
body += ' ';
}
//console.log('product.energy_site_id: ' + product.energy_site_id);
//console.log('settings.active_site: ' + settings.active_site);
if ( product.energy_site_id == settings.active_site){
//console.log('Setting backup reserve to ' + site_info['backup_reserve_percent']);
$('#backup_reserve').val(site_info['backup_reserve_percent']);
}
body += ' ';
body += ' | ';
body += '
';
}
}
body += '';
}
$('#products').html(body);
}