render energy savings table
This commit is contained in:
@@ -35,8 +35,9 @@ var Layout = React.createClass({
|
|||||||
var layout = this,
|
var layout = this,
|
||||||
view = event.target.value;
|
view = event.target.value;
|
||||||
layout.view_name = event.target.innerText;
|
layout.view_name = event.target.innerText;
|
||||||
layout.setState({view: view});
|
layout.setState({view: view}, function(){
|
||||||
layout.ensureHouseViewData();
|
layout.ensureHouseViewData();
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
setHouse: function(event){
|
setHouse: function(event){
|
||||||
|
|||||||
@@ -19,8 +19,8 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th></th>
|
<th></th>
|
||||||
<th>Day</th>
|
<th>Day</th>
|
||||||
<th>Consumption (Wh)</th>
|
<th>Consumption (kWh)</th>
|
||||||
<th>Production (Wh)</th>
|
<th>Production (kWh)</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ export default function () {
|
|||||||
'onChange': this.setHouse
|
'onChange': this.setHouse
|
||||||
},
|
},
|
||||||
_.map(this.state.houses, repeatHouse2.bind(this))
|
_.map(this.state.houses, repeatHouse2.bind(this))
|
||||||
])) : null, this.state.view === 'energy' && this.state.house ? React.createElement('table', { 'className': 'table' }, React.createElement('thead', {}, React.createElement('tr', {}, React.createElement('th', {}), React.createElement('th', {}, 'Day'), React.createElement('th', {}, 'Consumption (Wh)'), React.createElement('th', {}, 'Production (Wh)'))), React.createElement.apply(this, [
|
])) : null, this.state.view === 'energy' && this.state.house ? React.createElement('table', { 'className': 'table' }, React.createElement('thead', {}, React.createElement('tr', {}, React.createElement('th', {}), React.createElement('th', {}, 'Day'), React.createElement('th', {}, 'Consumption (kWh)'), React.createElement('th', {}, 'Production (kWh)'))), React.createElement.apply(this, [
|
||||||
'tbody',
|
'tbody',
|
||||||
{},
|
{},
|
||||||
_.map(this.state.house.energy_data, repeatEnergy_datum3.bind(this))
|
_.map(this.state.house.energy_data, repeatEnergy_datum3.bind(this))
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ class House {
|
|||||||
|
|
||||||
if (date_range.length === 0) return house.getEnergyData({dates: [[opts.start_date, opts.end_date]]})
|
if (date_range.length === 0) return house.getEnergyData({dates: [[opts.start_date, opts.end_date]]})
|
||||||
|
|
||||||
query_ranges = MathUtil.minusRange([start_date, end_date], [min_date, max_date]);
|
query_ranges = MathUtil.minusRange([opts.start_date, opts.end_date], [min_date, max_date]);
|
||||||
|
|
||||||
cache = ArrayUtil.selectMap(date_range, (datum_day)=>{
|
cache = ArrayUtil.selectMap(date_range, (datum_day)=>{
|
||||||
return ArrayUtil.all(query_ranges, (query_range)=>{
|
return ArrayUtil.all(query_ranges, (query_range)=>{
|
||||||
@@ -105,7 +105,7 @@ class House {
|
|||||||
return EnergyDataApi.index(params).then((energy_data)=>{
|
return EnergyDataApi.index(params).then((energy_data)=>{
|
||||||
return energy_data.map((energy_datum_data)=>{
|
return energy_data.map((energy_datum_data)=>{
|
||||||
var energy_datum = EnergyDatum.updateOrInitialize(energy_datum_data, house);
|
var energy_datum = EnergyDatum.updateOrInitialize(energy_datum_data, house);
|
||||||
house.energy_data_store.set(power_datum.time, energy_datum);
|
house.energy_data_store.set(energy_datum.day, energy_datum);
|
||||||
house.energy_data.push(energy_datum);
|
house.energy_data.push(energy_datum);
|
||||||
return energy_datum;
|
return energy_datum;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class PowerDatum {
|
|||||||
|
|
||||||
get time_to_s(){
|
get time_to_s(){
|
||||||
var power_datum = this;
|
var power_datum = this;
|
||||||
return power_datum.data.time.format('YYYY-MM-DD HH:MM');
|
return power_datum.data.time.format('YYYY-MM-DD HH:mm');
|
||||||
}
|
}
|
||||||
get consumption_to_s(){
|
get consumption_to_s(){
|
||||||
var power_datum = this;
|
var power_datum = this;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ class EnergyController{
|
|||||||
|
|
||||||
static index(req, res){
|
static index(req, res){
|
||||||
DB.EnergyDatum.exposeForHouseAtDates(req.query.house_id, req.query.dates).then((energy_data)=>{
|
DB.EnergyDatum.exposeForHouseAtDates(req.query.house_id, req.query.dates).then((energy_data)=>{
|
||||||
req.json({data: energy_data});
|
res.json({data: energy_data});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,23 +21,23 @@ export class PowerDataSeed {
|
|||||||
data.time = moment.utc(parseInt(data.time * 1000)).format();
|
data.time = moment.utc(parseInt(data.time * 1000)).format();
|
||||||
rows.push(data);
|
rows.push(data);
|
||||||
if (rows.length % 100 === 0){
|
if (rows.length % 100 === 0){
|
||||||
DB.PowerDatum.bulkCreate(rows, {validate: true}).then(()=>{
|
DB.PowerDatum.bulkCreate(rows, {validate: true}).catch((error)=>{
|
||||||
rows = [];
|
console.error(JSON.stringify(error));
|
||||||
|
console.error(JSON.stringify(rows));
|
||||||
});
|
});
|
||||||
|
rows = [];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
csvStream.on("end", function(){
|
csvStream.on("end", function(){
|
||||||
console.log("all rows parsed")
|
console.log("all rows parsed")
|
||||||
DB.PowerDatum.bulkCreate(rows, {validate: true}).then(()=>{
|
DB.PowerDatum.bulkCreate(rows, {validate: true}).then(()=>{
|
||||||
return DB.House.findAll().then((houses)=>{
|
return DB.House.findAll().then((houses)=>{
|
||||||
var promise = Promise.resolve();
|
var promises = [];
|
||||||
|
|
||||||
for (var house of houses){
|
for (var house of houses){
|
||||||
promise = promise.then(()=>{
|
var p = house.aggregatePowerToEnergyData();
|
||||||
return house.aggregatePowerToEnergyData();
|
promises.push(p);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
return promise;
|
return Promise.all(promises);
|
||||||
});
|
});
|
||||||
}).then(()=>{
|
}).then(()=>{
|
||||||
console.log("DONE!")
|
console.log("DONE!")
|
||||||
@@ -90,7 +90,6 @@ export class HouseSeed {
|
|||||||
rows = [];
|
rows = [];
|
||||||
|
|
||||||
csvStream.on("data", function(data){
|
csvStream.on("data", function(data){
|
||||||
console.log(JSON.stringify(data))
|
|
||||||
rows.push(data);
|
rows.push(data);
|
||||||
});
|
});
|
||||||
csvStream.on("end", function(){
|
csvStream.on("end", function(){
|
||||||
|
|||||||
@@ -14,7 +14,9 @@ var EnergyDatum = DB.sequelize.define(NAME, {
|
|||||||
primaryKey: true,
|
primaryKey: true,
|
||||||
autoIncrement: true // Automatically gets converted to SERIAL for postgres
|
autoIncrement: true // Automatically gets converted to SERIAL for postgres
|
||||||
},
|
},
|
||||||
day: DB.Sequelize.DATEONLY,
|
day: {
|
||||||
|
type: DB.Sequelize.DATEONLY,
|
||||||
|
},
|
||||||
production: DB.Sequelize.FLOAT,
|
production: DB.Sequelize.FLOAT,
|
||||||
consumption: DB.Sequelize.FLOAT
|
consumption: DB.Sequelize.FLOAT
|
||||||
}, {
|
}, {
|
||||||
@@ -22,9 +24,9 @@ var EnergyDatum = DB.sequelize.define(NAME, {
|
|||||||
underscored: true,
|
underscored: true,
|
||||||
tableName: "energy_data",
|
tableName: "energy_data",
|
||||||
instanceMethods: {
|
instanceMethods: {
|
||||||
exposeToApi: ()=>{
|
exposeToApi: function(){
|
||||||
var energy_datum = this,
|
var energy_datum = this,
|
||||||
values = this.dataValues;
|
values = energy_datum.dataValues;
|
||||||
values.energy_datum = energy_datum.day.getTime() / 1000;
|
values.energy_datum = energy_datum.day.getTime() / 1000;
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,11 +44,10 @@ var House = DB.sequelize.define(NAME, {
|
|||||||
power_data.forEach((power_datum)=>{
|
power_data.forEach((power_datum)=>{
|
||||||
var day = house.timeToDateString(power_datum.time),
|
var day = house.timeToDateString(power_datum.time),
|
||||||
energy_datum = energy_data.get(day) || {production: 0, consumption: 0, day: day, house_id: house.id};
|
energy_datum = energy_data.get(day) || {production: 0, consumption: 0, day: day, house_id: house.id};
|
||||||
energy_datum.production += power_datum.production;
|
energy_datum.production += power_datum.production / 1000; // convert Wh to kWh
|
||||||
energy_datum.consumption += power_datum.consumption;
|
energy_datum.consumption += power_datum.consumption / 1000; // convert Wh to kWh
|
||||||
energy_data.set(day, energy_datum);
|
energy_data.set(day, energy_datum);
|
||||||
});
|
});
|
||||||
console.log(Array.from(energy_data.values()))
|
|
||||||
return DB.EnergyDatum.bulkCreate(Array.from(energy_data.values()), {validate: true});
|
return DB.EnergyDatum.bulkCreate(Array.from(energy_data.values()), {validate: true});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,9 @@ var PowerDatum = DB.sequelize.define(NAME, {
|
|||||||
primaryKey: true,
|
primaryKey: true,
|
||||||
autoIncrement: true // Automatically gets converted to SERIAL for postgres
|
autoIncrement: true // Automatically gets converted to SERIAL for postgres
|
||||||
},
|
},
|
||||||
time: DB.Sequelize.DATE,
|
time: {
|
||||||
|
type: DB.Sequelize.DATE,
|
||||||
|
},
|
||||||
consumption: DB.Sequelize.FLOAT,
|
consumption: DB.Sequelize.FLOAT,
|
||||||
production: DB.Sequelize.FLOAT
|
production: DB.Sequelize.FLOAT
|
||||||
}, {
|
}, {
|
||||||
|
|||||||
Reference in New Issue
Block a user