Newer
Older
/*
* Create dummy data files for each fluid.
* Hourly data is not generated
*/
const fs = require('fs')
const { DateTime } = require('luxon')
const config = require('./config')
const fluidConfig = require('../src/constants/config.json').fluidConfig
function getRandomNumber(min, max) {
// Generate a random float between min and max
let randomFloat = Math.random() * (max - min) + min
// Round to two decimal places
randomFloat = Math.round(randomFloat * 100) / 100
return randomFloat
const generateHalfAnHourData = (startingDate, endingDate, min, max) => {
let parsingDate = DateTime.local(
startingDate.year,
startingDate.month,
startingDate.day,

Rémi PAILHAREY
committed
0,
0
)
while (parsingDate <= endingDate) {
const load = getRandomNumber(min, max)
halfAnHourDumpArray.push({
load: load,
year: parsingDate.year,
month: parsingDate.month,
day: parsingDate.day,
hour: parsingDate.hour,
minute: parsingDate.minute,
})
parsingDate = parsingDate.plus({ minute: 30 })
}
const generateData = (startingDate, endingDate, min, max, fluidType) => {
startingDate.year,
startingDate.month,
startingDate.day
while (parsingDate <= endingDate) {
const load = getRandomNumber(min, max)
dayDumpArray.push({
load: load,
year: parsingDate.year,
month: parsingDate.month,
day: parsingDate.day,
hour: 0,
minute: 0,
price: load * fluidConfig[fluidType].coefficient,
})
parsingDate = parsingDate.plus({ days: 1 })
}
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// Function to aggregate load data for a specific period
function aggregateLoadData(data, period) {
const aggregatedData = {}
data.forEach(entry => {
let key
const entryCopy = { ...entry }
switch (period) {
case 'day':
key = `${entryCopy.year}-${entryCopy.month}-${entryCopy.day}`
entryCopy.hour = 0
entryCopy.minute = 0
break
case 'month':
key = `${entryCopy.year}-${entryCopy.month}`
entryCopy.day = 0
entryCopy.minute = 0
break
case 'year':
key = `${entryCopy.year}`
entryCopy.month = 0
entryCopy.day = 0
entryCopy.minute = 0
break
default:
break
}
if (!aggregatedData[key]) {
aggregatedData[key] = {
load: entryCopy.load,
year: entryCopy.year,
month: entryCopy.month,
day: entryCopy.day,
hour: entryCopy.hour,
minute: entryCopy.minute,
}
} else {
aggregatedData[key].load += entryCopy.load
aggregatedData[key].price += entryCopy.price
return Object.values(aggregatedData)
// Create data folder
const dir = './data'
if (!fs.existsSync(dir)) {
console.log('Create data folder...')
fs.mkdirSync(dir)
}
const startingDate = config.startingDate
const halfHourStartingDate = config.halfHourStartingDate
const elecHalfHourData = generateHalfAnHourData(
halfHourStartingDate,

Rémi PAILHAREY
committed
0.12,
0.36
// Aggregate all half-hour data available and generate more daily data between startingDate and halfHourStartingDate
const elecAggregatedDayData = aggregateLoadData(elecHalfHourData, 'day')
const elecGeneratedDayData = generateData(
startingDate,
halfHourStartingDate.minus({ days: 1 }),
4,
)
const elecDayData = [...elecAggregatedDayData, ...elecGeneratedDayData]
const elecMonthData = aggregateLoadData(elecDayData, 'month')
const elecYearData = aggregateLoadData(elecMonthData, 'year')
const gasDayData = generateData(startingDate, endingDate, 16, 68, 2)
const gasMonthData = aggregateLoadData(gasDayData, 'month')
const gasYearData = aggregateLoadData(gasMonthData, 'year')
const waterDayData = generateData(startingDate, endingDate, 200, 300, 1)
const waterMonthData = aggregateLoadData(waterDayData, 'month')
const waterYearData = aggregateLoadData(waterMonthData, 'year')
'com.grandlyon.enedis.minute': elecHalfHourData,
'com.grandlyon.enedis.day': elecDayData,
'com.grandlyon.enedis.month': elecMonthData,
'com.grandlyon.enedis.year': elecYearData,
'com.grandlyon.grdf.day': gasDayData,
'com.grandlyon.grdf.month': gasMonthData,
'com.grandlyon.grdf.year': gasYearData,
'com.grandlyon.egl.day': waterDayData,
'com.grandlyon.egl.month': waterMonthData,
'com.grandlyon.egl.year': waterYearData,
}
const dumpString = JSON.stringify(dump)
fs.writeFile('data/loads.json', dumpString, function (err) {