create irradiance composite graph

This commit is contained in:
Eric Hulburd
2016-03-11 17:38:03 -06:00
parent 2dd9389694
commit 782f5cbf91
32 changed files with 824 additions and 379 deletions

View File

@@ -1,6 +1,9 @@
import extend from 'extend';
import moment from 'moment-timezone';
import DateRange from './../../shared/utils/date_range';
import EnergyDataApi from 'api/energy_data';
const NAME = 'EnergyDatum';
const COLLECTION_DEFAULTS = {
indices: ['day']
@@ -29,16 +32,58 @@ class EnergyDatum {
return moment.tz(energy_datum.data.day * 1000, energy_datum.house.data.timezone).format('YYYY-MM-DD');
}
get consumption_to_s(){
get irradiance(){
var energy_datum = this;
return Math.round(energy_datum.data.irradiance);
}
get consumption(){
var energy_datum = this;
return Math.round(energy_datum.data.consumption);
}
get production_to_s(){
get production(){
var energy_datum = this;
return Math.round(energy_datum.data.production);
}
// This method will ensure the energy data for the passed houses while:
// 1. Making only 1 API.
// 2. Only opening 1 house LokiJs DB at a time.
static ensureEnergyDataForHouses(houses, date_range){
var new_ranges = {}, params = [];
houses.forEach((house)=>{
var query_ranges = DateRange.addRange(date_range, house.data.energy_datum_ranges || []);
if (query_ranges.gaps_filled.length > 0) {
params.push({dates: query_ranges.gaps_filled, house_id: house.data.id});
new_ranges[house.data.id] = query_ranges.new_ranges;
}
});
// already have all the data we need.
if (params.length === 0) return Promise.resolve();
// get all data needed for all houses in one call.
return new Promise((fnResolve, fnReject)=>{
EnergyDataApi.index({houses: params})
.then((energy_data)=>{
energy_data = energy_data.reduce((grouped, energy_datum)=>{
grouped[energy_datum.house_id] = grouped[energy_datum.house_id] || [];
grouped[energy_datum.house_id].push(energy_datum);
return grouped;
}, {});
houses.reduce((promise, house)=>{
return promise.then(()=>{
if (!energy_data[house.data.id]) return Promise.resolve();
return house.saveEnergyData(energy_data[house.data.id], new_ranges[house.data.id])
}).then(()=>{
house.closeDb();
});
}, Promise.resolve()).then(fnResolve);
});
})
}
}
EnergyDatum.NAME = NAME;