diff --git a/index.js b/index.js index 993b8fd102dbdd6db1a470aa848bd4995309ad8e..ec4afe5790a5a95d4bdd99b1a63b85bd241f0add 100644 --- a/index.js +++ b/index.js @@ -107,13 +107,12 @@ moment.locale('fr') // set the language moment.tz.setDefault('Europe/Paris') // set the timezone /*** Connector Constants ***/ -const startDailyDate = moment() - .subtract(32, 'month') - .format('YYYY-MM-DD') -const startLoadDate = moment() - .subtract(7, 'day') - .format('YYYY-MM-DD') -const endDate = moment().format('YYYY-MM-DD') +const startDailyDate = moment().subtract(32, 'month') +const startDailyDateString = startDailyDate.format('YYYY-MM-DD') +const startLoadDate = moment().subtract(7, 'day') +const startLoadDateString = startLoadDate.format('YYYY-MM-DD') +const endDate = moment() +const endDateString = endDate.format('YYYY-MM-DD') const baseUrl = 'https://gw.prd.api.enedis.fr' /** @@ -159,20 +158,8 @@ async function start(fields, cozyParameters, doRetry = true) { log('info', 'Agregate enedis daily data for month and year') await agregateMonthAndYearData(processedDailyData) - log('info', 'Fetching enedis load data') - const fetchedLoadData = await getLoadData(access_token, usage_point_id) - if (fetchedLoadData && fetchedLoadData.length > 0) { - log('info', 'Process enedis load data') - const processedLoadData = await processData( - fetchedLoadData, - 'com.grandlyon.enedis.minute', - ['year', 'month', 'day', 'hour', 'minute'] - ) - log('info', 'Agregate enedis load data for hour') - await agregateHourlyData(processedLoadData) - } else { - log('info', 'No consent or data for load curve') - } + log('info', 'Process enedis load data') + await startLoadDataProcess(access_token, usage_point_id) } catch (err) { if (err.statusCode === 403 || err.code === 403) { if (!fields.refresh_token) { @@ -216,9 +203,9 @@ async function getDailyData(token, usagePointID) { uri: baseUrl + '/v4/metering_data/daily_consumption?start=' + - startDailyDate + + startDailyDateString + '&end=' + - endDate + + endDateString + '&usage_point_id=' + usagePointID, headers: { @@ -230,19 +217,86 @@ async function getDailyData(token, usagePointID) { return response } +/** + * Check if history is loaded + * If not, call several time the api to retrieve 1 month of history for load data + * If yes only call once the api + */ +async function startLoadDataProcess(token, usagePointID) { + log('info', 'Check history') + const isHistory = await isHistoryLoaded('com.grandlyon.enedis.minute') + if (isHistory) { + log('info', 'launch process without history') + await launchLoadDataProcess( + token, + usagePointID, + startLoadDateString, + endDateString + ) + } else { + log('info', 'launch process with history') + for (var i = 0; i < 4; i++) { + const increamentedStartDate = moment(startLoadDate) + const incrementedEndDate = moment(endDate) + const increamentedStartDateString = increamentedStartDate + .subtract(7 * i, 'day') + .format('YYYY-MM-DD') + const incrementedEndDateString = incrementedEndDate + .subtract(7 * i, 'day') + .format('YYYY-MM-DD') + await launchLoadDataProcess( + token, + usagePointID, + increamentedStartDateString, + incrementedEndDateString + ) + } + } +} + +/** + * Launch process to handle load data + */ +async function launchLoadDataProcess( + token, + usagePointID, + _startLoadDate, + _endDate +) { + log('info', 'Fetching enedis load data') + const fetchedLoadData = await getLoadData( + token, + usagePointID, + _startLoadDate, + _endDate + ) + if (fetchedLoadData && fetchedLoadData.length > 0) { + log('info', 'Process enedis load data') + const processedLoadData = await processData( + fetchedLoadData, + 'com.grandlyon.enedis.minute', + ['year', 'month', 'day', 'hour', 'minute'] + ) + log('info', 'Agregate enedis load data for hour') + await agregateHourlyData(processedLoadData) + } else { + log('info', 'No consent or data for load curve') + } +} + /** * Retrieve data from the API * Format: { value: "W", "date": "YYYY-MM-DD hh:mm:ss" } */ -async function getLoadData(token, usagePointID) { +async function getLoadData(token, usagePointID, _startDate, _endDate) { const dataRequest = { method: 'GET', uri: baseUrl + '/v4/metering_data/consumption_load_curve?start=' + - startLoadDate + + _startDate + '&end=' + - endDate + + _endDate + '&usage_point_id=' + usagePointID, headers: { @@ -442,6 +496,29 @@ async function buildDataFromKey(doctype, key, value) { } } +/** + * Function checking if the history is loaded + */ +async function isHistoryLoaded(doctype) { + log('debug', doctype, 'Retrieve data') + const result = await cozyClient.data.findAll(doctype) + if (result && result.length > 0) { + const filtered = result.filter(function(el) { + return ( + el.year <= startLoadDate.year && + el.month <= startLoadDate.month && + el.day <= startLoadDate.day + ) + }) + if (filtered.length > 0) { + return false + } else { + return true + } + } + return false +} + /** * Function handling special case. * The temporary aggregated data need to be remove in order for the most recent one te be saved. @@ -123801,7 +123878,7 @@ const fs = __webpack_require__(167); const path = __webpack_require__(160); -let manifest = typeof {"version":"0.1.5","name":"Enedis","type":"konnector","language":"node","icon":"icon.png","slug":"enedisgrandlyon","source":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-konnector.git","editor":"Métropole de Lyon","vendor_link":"https://www.enedis.fr/","categories":["energy"],"frequency":"daily","fields":{"access_token":{"type":"hidden"},"refresh_token":{"type":"hidden"}},"oauth":{},"data_types":[],"screenshots":[],"permissions":{"accounts":{"type":"io.cozy.accounts"},"enedis data":{"type":"com.grandlyon.enedis.*"}},"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"langs":["fr"],"locales":{"fr":{"short_description":"Récupère vos donnéees de courbe de charge depuis l'API Enedis","long_description":"Ce connecteur récupère la courbe de charge électrique enregistrée par le compteur Linky","permissions":{"enedis data":{"description":"La courbe de charge électrique enregistrée par le compteur Linky"},"accounts":{"description":"Utilisé pour obtenir les données du compte"}}}},"manifest_version":"2"} === 'undefined' ? {} : {"version":"0.1.5","name":"Enedis","type":"konnector","language":"node","icon":"icon.png","slug":"enedisgrandlyon","source":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-konnector.git","editor":"Métropole de Lyon","vendor_link":"https://www.enedis.fr/","categories":["energy"],"frequency":"daily","fields":{"access_token":{"type":"hidden"},"refresh_token":{"type":"hidden"}},"oauth":{},"data_types":[],"screenshots":[],"permissions":{"accounts":{"type":"io.cozy.accounts"},"enedis data":{"type":"com.grandlyon.enedis.*"}},"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"langs":["fr"],"locales":{"fr":{"short_description":"Récupère vos donnéees de courbe de charge depuis l'API Enedis","long_description":"Ce connecteur récupère la courbe de charge électrique enregistrée par le compteur Linky","permissions":{"enedis data":{"description":"La courbe de charge électrique enregistrée par le compteur Linky"},"accounts":{"description":"Utilisé pour obtenir les données du compte"}}}},"manifest_version":"2"}; +let manifest = typeof {"version":"0.2.0","name":"Enedis","type":"konnector","language":"node","icon":"icon.png","slug":"enedisgrandlyon","source":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-konnector.git","editor":"Métropole de Lyon","vendor_link":"https://www.enedis.fr/","categories":["energy"],"frequency":"daily","fields":{"access_token":{"type":"hidden"},"refresh_token":{"type":"hidden"}},"oauth":{},"data_types":[],"screenshots":[],"permissions":{"accounts":{"type":"io.cozy.accounts"},"enedis data":{"type":"com.grandlyon.enedis.*"}},"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"langs":["fr"],"locales":{"fr":{"short_description":"Récupère vos donnéees de courbe de charge depuis l'API Enedis","long_description":"Ce connecteur récupère la courbe de charge électrique enregistrée par le compteur Linky","permissions":{"enedis data":{"description":"La courbe de charge électrique enregistrée par le compteur Linky"},"accounts":{"description":"Utilisé pour obtenir les données du compte"}}}},"manifest_version":"2"} === 'undefined' ? {} : {"version":"0.2.0","name":"Enedis","type":"konnector","language":"node","icon":"icon.png","slug":"enedisgrandlyon","source":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-konnector.git","editor":"Métropole de Lyon","vendor_link":"https://www.enedis.fr/","categories":["energy"],"frequency":"daily","fields":{"access_token":{"type":"hidden"},"refresh_token":{"type":"hidden"}},"oauth":{},"data_types":[],"screenshots":[],"permissions":{"accounts":{"type":"io.cozy.accounts"},"enedis data":{"type":"com.grandlyon.enedis.*"}},"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"langs":["fr"],"locales":{"fr":{"short_description":"Récupère vos donnéees de courbe de charge depuis l'API Enedis","long_description":"Ce connecteur récupère la courbe de charge électrique enregistrée par le compteur Linky","permissions":{"enedis data":{"description":"La courbe de charge électrique enregistrée par le compteur Linky"},"accounts":{"description":"Utilisé pour obtenir les données du compte"}}}},"manifest_version":"2"}; if (false) {} diff --git a/manifest.konnector b/manifest.konnector index bbe0be1777a10ff2cde224c5b9737636b3a52f08..bb794649e21660740f3cc05ead982e0b8df20698 100644 --- a/manifest.konnector +++ b/manifest.konnector @@ -1,5 +1,5 @@ { - "version": "0.1.5", + "version": "0.2.0", "name": "Enedis", "type": "konnector", "language": "node", diff --git a/package.json b/package.json index 7d429c9f4bdbf985a718131987d99d949e5858e0..af6fd523f62cf5aa0f3529442e6c6dd3654c408d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "enedis", - "version": "0.1.5", + "version": "0.2.0", "description": "", "repository": { "type": "git", @@ -34,6 +34,7 @@ "build": "webpack", "lint": "eslint --fix .", "deploy": "git-directory-deploy --directory build/ --branch ${DEPLOY_BRANCH:-build} --repo=${DEPLOY_REPOSITORY:-https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-konnector.git}", + "deploy-dev": "git-directory-deploy --directory build/ --branch ${DEPLOY_BRANCH:-build-dev} --repo=${DEPLOY_REPOSITORY:-https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-konnector.git}", "cozyPublish": "cozy-app-publish --token $REGISTRY_TOKEN --build-commit $(git rev-parse ${DEPLOY_BRANCH:-build})", "travisDeployKey": "./bin/generate_travis_deploy_key" },