/* * Create dummy data files for each fluid. * Hourly data is not generated */ const fs = require('fs') const { DateTime } = require('luxon') const config = require('./config') function getRandomInt(min, max) { const minValue = Math.ceil(min * 100) const maxValue = Math.floor(max * 100) // NOSONAR const result = (Math.floor(Math.random() * (maxValue - minValue)) + minValue) / 100 // NOSONAR return result } const generateHalfAnHourData = (_startingdate, _endingDate, min, max) => { let parsingDate parsingDate = DateTime.local( _startingdate.year, _startingdate.month, _startingdate.day, 0, 0 ) const halfAnHourDumpArray = [] let lastDay = parsingDate.day const dayDumpArray = [] let lastMonth = parsingDate.month const monthDumpArray = [] let lastYear = parsingDate.year const yearDumpArray = [] let dailyLoad = 0 let monthlyLoad = 0 let yearlyLoad = 0 while (parsingDate <= _endingDate) { const load = getRandomInt(min, max) dailyLoad += load monthlyLoad += load yearlyLoad += load halfAnHourDumpArray.push({ load: load, year: parsingDate.year, month: parsingDate.month, day: parsingDate.day, hour: parsingDate.hour, minute: parsingDate.minute, }) if (parsingDate.day !== lastDay) { dayDumpArray.push({ load: Math.round(dailyLoad * 100) / 100, year: lastYear, month: lastMonth, day: lastDay, hour: 0, minute: 0, }) dailyLoad = 0 lastDay = parsingDate.day } if (parsingDate.month !== lastMonth) { monthDumpArray.push({ load: Math.round(monthlyLoad * 100) / 100, year: lastYear, month: lastMonth, day: 0, hour: 0, minute: 0, }) monthlyLoad = 0 lastMonth = parsingDate.month } if (parsingDate.year !== lastYear) { yearDumpArray.push({ load: Math.round(yearlyLoad * 100) / 100, year: lastYear, month: 1, day: 1, hour: 0, minute: 0, }) yearlyLoad = 0 lastYear = parsingDate.year } parsingDate = parsingDate.plus({ minute: 30 }) } dayDumpArray.push({ load: Math.round(dailyLoad * 100) / 100, year: lastYear, month: lastMonth, day: lastDay, hour: 0, minute: 0, }) monthDumpArray.push({ load: Math.round(monthlyLoad * 100) / 100, year: lastYear, month: lastMonth, day: 1, hour: 0, minute: 0, }) yearDumpArray.push({ load: Math.round(yearlyLoad * 100) / 100, year: lastYear, month: 1, day: 1, hour: 0, minute: 0, }) return { halfAnHourLoad: halfAnHourDumpArray, dailyLoad: dayDumpArray, monthlyLoad: monthDumpArray, yearlyLoad: yearDumpArray, } } const generateData = (_startingdate, _endingDate, min, max) => { let parsingDate = DateTime.local( _startingdate.year, _startingdate.month, _startingdate.day ) const dayDumpArray = [] let lastMonth = parsingDate.month const monthDumpArray = [] let lastYear = parsingDate.year const yearDumpArray = [] let monthlyLoad = 0 let yearlyLoad = 0 while (parsingDate <= _endingDate) { const load = getRandomInt(min, max) monthlyLoad += load yearlyLoad += load dayDumpArray.push({ load: load, year: parsingDate.year, month: parsingDate.month, day: parsingDate.day, hour: 0, minute: 0, }) if (parsingDate.month !== lastMonth) { monthDumpArray.push({ load: Math.round(monthlyLoad * 100) / 100, year: lastYear, month: lastMonth, day: 0, hour: 0, minute: 0, }) monthlyLoad = 0 lastMonth = parsingDate.month } if (parsingDate.year !== lastYear) { yearDumpArray.push({ load: Math.round(yearlyLoad * 100) / 100, year: lastYear, month: 1, day: 1, hour: 0, minute: 0, }) yearlyLoad = 0 lastYear = parsingDate.year } parsingDate = parsingDate.plus({ days: 1 }) } monthDumpArray.push({ load: Math.round(monthlyLoad * 100) / 100, year: lastYear, month: lastMonth, day: 1, hour: 0, minute: 0, }) yearDumpArray.push({ load: Math.round(yearlyLoad * 100) / 100, year: lastYear, month: 1, day: 1, hour: 0, minute: 0, }) return { dailyLoad: dayDumpArray, monthlyLoad: monthDumpArray, yearlyLoad: yearDumpArray, } } // Create data folder const dir = './data' if (!fs.existsSync(dir)) { console.log('Create data folder...') fs.mkdirSync(dir) } const startingdate = config.startingdate const endingDate = config.endingDate const halfHourStartingdate = config.halfHourStartingdate const Elec = generateHalfAnHourData( halfHourStartingdate, endingDate.endOf('day'), 0.12, 0.36 ) const Gaz = generateData(startingdate, endingDate, 16, 68) const Eau = generateData(startingdate, endingDate, 200, 300) const dumpElec = { 'com.grandlyon.enedis.minute': Elec.halfAnHourLoad, 'com.grandlyon.enedis.day': Elec.dailyLoad, 'com.grandlyon.enedis.month': Elec.monthlyLoad, 'com.grandlyon.enedis.year': Elec.yearlyLoad, } const dumpStringElec = JSON.stringify(dumpElec) fs.writeFile('data/dayData-elec.json', dumpStringElec, function (err) { if (err) console.log('error', err) }) const dumpGas = { 'com.grandlyon.grdf.day': Gaz.dailyLoad, 'com.grandlyon.grdf.month': Gaz.monthlyLoad, 'com.grandlyon.grdf.year': Gaz.yearlyLoad, } const dumpStringGas = JSON.stringify(dumpGas) fs.writeFile('data/dayData-gas.json', dumpStringGas, function (err) { if (err) console.log('error', err) }) const dumpWater = { 'com.grandlyon.egl.day': Eau.dailyLoad, 'com.grandlyon.egl.month': Eau.monthlyLoad, 'com.grandlyon.egl.year': Eau.yearlyLoad, } const dumpStringWater = JSON.stringify(dumpWater) fs.writeFile('data/dayData-water.json', dumpStringWater, function (err) { if (err) console.log('error', err) }) const dump = { 'com.grandlyon.enedis.minute': Elec.halfAnHourLoad, 'com.grandlyon.enedis.day': Elec.dailyLoad, 'com.grandlyon.enedis.month': Elec.monthlyLoad, 'com.grandlyon.enedis.year': Elec.yearlyLoad, 'com.grandlyon.grdf.day': Gaz.dailyLoad, 'com.grandlyon.grdf.month': Gaz.monthlyLoad, 'com.grandlyon.grdf.year': Gaz.yearlyLoad, 'com.grandlyon.egl.day': Eau.dailyLoad, 'com.grandlyon.egl.month': Eau.monthlyLoad, 'com.grandlyon.egl.year': Eau.yearlyLoad, } const dumpString = JSON.stringify(dump) fs.writeFile('data/dayData.json', dumpString, function (err) { if (err) console.log('error', err) })