90 lines
2.0 KiB
JavaScript
90 lines
2.0 KiB
JavaScript
/**
|
|
* Provide a way to get new data.
|
|
*/
|
|
var DataProvider = function() {
|
|
var api = {};
|
|
var energy_provider = null; // Cache for energy provider info
|
|
var sensor_id = null; // Cache for sensor ID
|
|
|
|
api.onratechange = function(rate){};
|
|
|
|
/**
|
|
* Get new data from server.
|
|
* @param target: Type of data to get (@see API specification)
|
|
* @param callback: callback that take data as first argument
|
|
*/
|
|
api.get = function(target, callback) {
|
|
var req = new XMLHttpRequest();
|
|
req.open('GET', API_URL + target, true);
|
|
req.send();
|
|
req.onreadystatechange = function() {
|
|
if (req.readyState == 4) {
|
|
var res;
|
|
try {
|
|
res = JSON.parse(req.responseText);
|
|
}
|
|
catch (e) {
|
|
console.log('ERROR while handling `' + target + '`:', req.responseText);
|
|
}
|
|
if (res && res.rate) {
|
|
api.onratechange(res.rate);
|
|
}
|
|
if (res && res.data === null) res.data = [];
|
|
callback(res.data);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Get current provider info
|
|
* @param callback: callback that takes provider
|
|
*/
|
|
api.getProviderInfo = function(callback) {
|
|
if (energy_provider === null) {
|
|
api.get('/energy_providers/current', function(provider) {
|
|
energy_provider = provider;
|
|
callback(energy_provider);
|
|
});
|
|
} else {
|
|
callback(energy_provider);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Get watt_euros convertion info
|
|
* @param rate: day or night tariff
|
|
* @param callback: callback that takes origin value and slope
|
|
*/
|
|
api.getConvertInfo = function(rate, callback) {
|
|
api.getProviderInfo(function(provider){
|
|
callback(
|
|
provider[rate+'_slope_watt_euros'],
|
|
provider[rate+'_constant_watt_euros']
|
|
);
|
|
});
|
|
}
|
|
|
|
|
|
/**
|
|
* Get active sensor ID (active iff name is 'CitizenWatt')
|
|
* @param callback: callback that takes sensor ID
|
|
*/
|
|
api.getSensorId = function(callback) {
|
|
if (sensor_id == null) {
|
|
api.get('/sensors', function(sensors) {
|
|
for (var i = sensors.length - 1; i >= 0; i--) {
|
|
if (sensors[i].name == 'CitizenWatt')
|
|
sensor_id = sensors[i].id;
|
|
};
|
|
callback(sensor_id);
|
|
});
|
|
} else {
|
|
callback(sensor_id);
|
|
}
|
|
}
|
|
|
|
return api;
|
|
};
|