UNPKG

solar-scores

Version:

Compute scores for solar decathlon competition - Cali 2015

309 lines (290 loc) 7.64 kB
'use strict'; const DAYS_OFFSET = process.env.SCORES_DAY_OFFSET || 0; var periods = {}; var points = require('./points'); const moment = require('moment'); let allTime = [ { begin: '2015-12-05 12:00:00', end: '2015-12-06 00:00:00' }, { begin: '2015-12-06 00:00:00', end: '2015-12-07 00:00:00' }, { begin: '2015-12-07 00:00:00', end: '2015-12-08 00:00:00' }, { begin: '2015-12-08 00:00:00', end: '2015-12-09 00:00:00' }, { begin: '2015-12-09 00:00:00', end: '2015-12-10 00:00:00' }, { begin: '2015-12-10 00:00:00', end: '2015-12-11 00:00:00' }, { begin: '2015-12-11 00:00:00', end: '2015-12-12 00:00:00' }, { begin: '2015-12-12 00:00:00', end: '2015-12-13 00:00:00' }, { begin: '2015-12-13 00:00:00', end: '2015-12-14 00:00:00' }, { begin: '2015-12-14 00:00:00', end: '2015-12-14 12:00:00' } ]; periods.Temperature = [ { begin: '2015-12-05 19:30:00', end: '2015-12-06 00:00:00', factor:0.5474860335 }, { begin: '2015-12-06 00:00:00', end: '2015-12-06 6:00:00', factor:0.5474860335 }, { begin: '2015-12-06 6:00:00', end: '2015-12-06 10:00:00', factor:1.826530612 }, { begin: '2015-12-06 19:30:00', end: '2015-12-07 00:00:00', factor:0.5474860335 }, { begin: '2015-12-07 00:00:00', end: '2015-12-07 06:00:00', factor:0.5474860335 }, { begin: '2015-12-07 06:00:00', end: '2015-12-07 09:30:00', factor:1.826530612 }, { begin: '2015-12-07 13:00:00', end: '2015-12-07 17:00:00', factor:1.826530612 }, { begin: '2015-12-07 20:30:00', end: '2015-12-08 00:00:00', factor:0.5474860335 }, { begin: '2015-12-08 00:00:00', end: '2015-12-08 06:00:00', factor:0.5474860335 }, { begin: '2015-12-08 06:00:00', end: '2015-12-08 09:30:00', factor:1.826530612 }, { begin: '2015-12-08 20:30:00', end: '2015-12-09 00:00:00', factor:0.5474860335 }, { begin: '2015-12-09 00:00:00', end: '2015-12-09 06:00:00', factor:0.5474860335 }, { begin: '2015-12-09 06:00:00', end: '2015-12-09 09:30:00', factor:1.826530612 }, { begin: '2015-12-09 13:00:00', end: '2015-12-09 17:00:00', factor:1.826530612 }, { begin: '2015-12-09 20:30:00', end: '2015-12-10 00:00:00', factor:0.5474860335 }, { begin: '2015-12-10 00:00:00', end: '2015-12-10 06:00:00', factor:0.5474860335 }, { begin: '2015-12-10 06:00:00', end: '2015-12-10 09:30:00', factor:1.826530612 }, { begin: '2015-12-10 13:00:00', end: '2015-12-10 17:00:00', factor:1.826530612 }, { begin: '2015-12-10 20:30:00', end: '2015-12-11 00:00:00', factor:0.5474860335 }, { begin: '2015-12-11 00:00:00', end: '2015-12-11 06:00:00', factor:0.5474860335 }, { begin: '2015-12-11 06:00:00', end: '2015-12-11 09:30:00', factor:1.826530612 }, { begin: '2015-12-11 13:00:00', end: '2015-12-11 17:00:00', factor:1.826530612 }, { begin: '2015-12-11 20:30:00', end: '2015-12-12 00:00:00', factor:0.5474860335 }, { begin: '2015-12-12 00:00:00', end: '2015-12-12 06:00:00', factor:0.5474860335 }, { begin: '2015-12-12 06:00:00', end: '2015-12-12 09:30:00', factor:1.826530612 }, { begin: '2015-12-12 19:30:00', end: '2015-12-13 00:00:00', factor:0.5474860335 }, { begin: '2015-12-13 00:00:00', end: '2015-12-13 06:00:00', factor:0.5474860335 }, { begin: '2015-12-13 06:00:00', end: '2015-12-13 10:00:00', factor:1.826530612 }, { begin: '2015-12-13 19:30:00', end: '2015-12-14 00:00:00', factor:0.5474860335 }, { begin: '2015-12-14 00:00:00', end: '2015-12-14 06:00:00', factor:0.5474860335 }, { begin: '2015-12-14 06:00:00', end: '2015-12-14 10:00:00', factor:1.826530612 } ]; periods.Humidity = periods.Temperature; periods.Luminosity = eachDay('06:00:00', '18:00:00'); periods.Luminosity[0] = { begin: '2015-12-05 12:00:00', end: '2015-12-05 18:30:00' }; periods.Refrigeration = periods.Freezing = periods.PowerPeaks = periods.EglEl = periods.EnergyBalance = periods.EnergyConsumption = periods.Water = allTime; for(let key in periods) { periods[key] = periods[key].map(function(period) { if(period.factor){ return { begin: moment(new Date(period.begin + ' GMT-0500')).add(DAYS_OFFSET, 'days').toDate(), end: moment(new Date(period.end + ' GMT-0500')).add(DAYS_OFFSET, 'days').toDate(), factor:period.factor } } else{ return { begin: moment(new Date(period.begin + ' GMT-0500')).add(DAYS_OFFSET, 'days').toDate(), end: moment(new Date(period.end + ' GMT-0500')).add(DAYS_OFFSET, 'days').toDate() } } }); } for(let key in periods) { let duration = doDuration(periods[key]); for(let i=0; i<periods[key].length ; i++) { let interval = periods[key][i]; if(!interval.factor) interval.points = getIntervalFraction(interval, duration) * points[key]; else{ interval.points = getIntervalFraction(interval, duration) * points[key]*interval.factor; } } periods[key].totalDuration = duration * 3600; } function doDuration(period) { let duration = moment.duration(0); for(let i=0; i<period.length; i++) { let begin = new Date(period[i].begin); let end = new Date(period[i].end); var dur = moment.duration(moment(end).diff(begin)); period[i].duration = dur.asSeconds(); duration.add(dur); } return duration.as('hours'); } function getIntervalFraction(interval, totalDuration) { var duration = moment.duration(moment(interval.end).diff(interval.begin)).asHours(); return duration / totalDuration; } function eachDay(timeBegin, timeEnd) { let days = ['2015-12-05', '2015-12-06', '2015-12-07', '2015-12-08', '2015-12-09', '2015-12-10', '2015-12-11', '2015-12-12', '2015-12-13']; return days.map(function(day) { return { begin: day + ' ' + timeBegin, end: day + ' ' + timeEnd }; }); } function byDay(periods) { var p = {}; for(let key in periods) { p[key] = oneByDay(periods[key]); } return p; } function oneByDay(period) { let days = new Map(); for(let i=0; i<period.length; i++) { let day = moment(period[i].begin).format('YYYY-MM-DD'); let el = days.get(day); if(!el) { days.set(day, {day: day, periods: []}); el = days.get(day); } el.periods.push(period[i]); } return Array.from(days.values()); } module.exports = {}; module.exports.all = periods; module.exports.byDay = byDay(periods); module.exports.oneByDay = oneByDay;