SlideShare a Scribd company logo
1 of 21
Download to read offline
Monitoring d'un compteur 
EDF avec Node.js 
@lhuet35 
SOFTEAM Cadextan
Qui suis-je 
• 10 ans de Java/Web 
• 4 ans de développement – Grosse SSII 
• 4 ans dans le bâtiment ! 
https://github.com/lhuet
Résumé en images
Hard
« Hacking » compteur EDF 
UART 
Rien n'est illégal dans ce montage 
(hacking != illégal) 
Liaison Téléinfo 
(Bornier client) 
Adaptateur 
« custom »
Montage téléinfo 
• Composants 
– 1 optocoupleur (VISHAY SFH620A-2) 
– 2 résistances (1.2 kΩ – 3.3 kΩ)
Prototype 
Coût ~ 2 €
Cablage sur le compteur
Soft
Protocole Teleinfo 
● Liaison série 1200 7E1 
– http://www.erdf.fr/medias/DTR_Racc_Comptage/ERDF-NOI-CPT_02E.pdf 
ADCO 000028290000 P 
OPTARIF BASE 0 
ISOUSC 30 9 
BASE 002247218 % 
PTEC TH.. $ 
IINST 003 Z 
IMAX 030 B 
PAPP 00630 * 
MOTDETAT 000000 B 
ADCO 000028290000 P 
OPTARIF BASE 0 
ISOUSC 30 9 
BASE 002247218 % 
PTEC TH.. $ 
IINST 003 Z 
IMAX 030 B 
PAPP 00630 * 
MOTDETAT 000000 B 
Exemple de trame 
(Tarif bleu)
Module Teleinfo sur Node.js 
• https://github.com/lhuet/teleinfo-node 
var teleinfo = require('teleinfo'); 
var util = require('util'); 
// Exemple d'utilisation sur Raspberry Pi 
var trameEvents = teleinfo('/dev/ttyAMA0'); 
// Évt 'tramedecodee' pour chaque trame reçue 
trameEvents.on('tramedecodee', function (data) { 
// data : objet avec données validées (checksum) 
var teleinfo = require('teleinfo'); 
var util = require('util'); 
// Exemple d'utilisation sur Raspberry Pi 
var trameEvents = teleinfo('/dev/ttyAMA0'); 
// Évt 'tramedecodee' pour chaque trame reçue 
trameEvents.on('tramedecodee', function (data) { 
// data : objet avec données validées (checksum) 
console.log(util.inspect(data)); 
console.log(util.inspect(data)); 
}); 
});
Module Teleinfo sur Node.js 
• Objet data 
{ ADCO: '000000000000', 
{ ADCO: '000000000000', 
OPTARIF: 'BASE', 
ISOUSC: 30, 
BASE: 6366719, 
PTEC: 'TH..', 
IINST: 1, 
IMAX: 30, 
PAPP: 300, 
MOTDETAT: '000000' 
} 
OPTARIF: 'BASE', 
ISOUSC: 30, 
BASE: 6366719, 
PTEC: 'TH..', 
IINST: 1, 
IMAX: 30, 
PAPP: 300, 
MOTDETAT: '000000' 
}
Module Tarifbleu sur Node.js 
• https://github.com/lhuet/tarifbleu-node 
var var tarifbleu tarifbleu = = require('require('tarifbleu'); 
tarifbleu'); 
var var util util = = require('require('util'); 
util'); 
var var logger logger = = function function ((data) data) { 
{ 
console.log(util.inspect(data)); 
console.log(util.inspect(data)); 
}; 
var info = tarifbleu('/dev/ttyAMA0', '00 * * * * *', 
}; 
var info = tarifbleu('/dev/ttyAMA0', '00 * * * * *', 
logger); 
setInterval(function() { 
console.log(info.getPuissanceApparente() + ' VA'); 
console.log(info.getIntensite() + ' A'); 
console.log(info.getIndex() + ' Wh'); 
}, 2000); 
logger); 
setInterval(function() { 
console.log(info.getPuissanceApparente() + ' VA'); 
console.log(info.getIntensite() + ' A'); 
console.log(info.getIndex() + ' Wh'); 
}, 2000);
Module Tarifbleu sur Node.js 
• Objet reçu en paramètre de logger 
{ imini: 1, 
{ imini: 1, 
imaxi: 1, 
imoy: 1, 
pmini: 200, 
pmaxi: 210, 
pmoy: 208.57142857142858, 
index: 6401853, 
pinst: 210, 
iinst: 1 
} 
imaxi: 1, 
imoy: 1, 
pmini: 200, 
pmaxi: 210, 
pmoy: 208.57142857142858, 
index: 6401853, 
pinst: 210, 
iinst: 1 
}
Application 
• MongoDB 
– SAAS 
– Aggregation framework 
• Node.js 
– Express + Liaison Téléinfo 
• AngularJS 
https://github.com/lhuet/teleinfo-app
Stockage dans MongoDB 
{ 
{ 
"datetime" : ISODate("2013-12-29T21:38:00.521Z"), 
"indexcpt" : 6399600, 
"imoy" : 1, 
"imax" : 1, 
"pmoy" : 296.1538461538461, 
"pmax" : 300, 
"_id" : ObjectId("52c096386e463dd40cdc5ef2") 
} 
"datetime" : ISODate("2013-12-29T21:38:00.521Z"), 
"indexcpt" : 6399600, 
"imoy" : 1, 
"imax" : 1, 
"pmoy" : 296.1538461538461, 
"pmax" : 300, 
"_id" : ObjectId("52c096386e463dd40cdc5ef2") 
}
Aggregation Framewoork 
• Ex : Puissance max par heure 
db.teleinfo.aggregate([ 
{$match: {datetime: 
db.teleinfo.aggregate([ 
{$match: {datetime: 
{$gte:ISODate('2014-02-16T00:00:00.000Z'), 
$lte:ISODate('2014-02-17T00:00:00.000Z')}}}, 
{$gte:ISODate('2014-02-16T00:00:00.000Z'), 
$lte:ISODate('2014-02-17T00:00:00.000Z')}}}, 
{$project: {mois:{'$month':'$datetime'}, 
{$project: {mois:{'$month':'$datetime'}, 
jour:{'$dayOfMonth':'$datetime'}, 
heure:{'$hour':'$datetime'}, 
minute:{'$minute':'$datetime'}, 
datetime:1, 
pmax:1}}, 
jour:{'$dayOfMonth':'$datetime'}, 
heure:{'$hour':'$datetime'}, 
minute:{'$minute':'$datetime'}, 
datetime:1, 
pmax:1}}, 
{$group: {_id:{mois:'$mois', jour:'$jour', heure:'$heure'}, 
{$group: {_id:{mois:'$mois', jour:'$jour', heure:'$heure'}, 
pmax:{$max:'$pmax'}}}, 
pmax:{$max:'$pmax'}}}, 
{$project: 
{$project: 
{heure:'$_id.heure', 
Pmax:1}}]) 
{heure:'$_id.heure', 
Pmax:1}}])
Frontend Web 
• AngularJS 
– Rudimentaire pour le moment 
• Node.js 
– API REST Données → temps réels + Données 
consolidées 
• Build avec Gulp.js 
– Livereload serveur + client
Application Web
Liens utiles 
Repos Github 
– https://github.com/lhuet/teleinfo-node 
– https://github.com/lhuet/tarifbleu-node 
– https://github.com/lhuet/teleinfo-app 
• Blog 
– http://lhuet.github.io/blog/
Merci :-) 
Questions ?

More Related Content

Viewers also liked

Monitoring Compteur EDF avec node.js
Monitoring Compteur EDF avec node.jsMonitoring Compteur EDF avec node.js
Monitoring Compteur EDF avec node.jslaurenthuet
 
Hacking your Home @bdx.io
Hacking your Home @bdx.ioHacking your Home @bdx.io
Hacking your Home @bdx.iolaurenthuet
 
Fotografies més boniques
Fotografies més boniquesFotografies més boniques
Fotografies més boniquesPaquivoramar
 
Cable reference id #06 caracas3356
Cable reference id  #06 caracas3356Cable reference id  #06 caracas3356
Cable reference id #06 caracas3356Tom Pereira
 
Note à l'étudiant liaison
Note à l'étudiant liaisonNote à l'étudiant liaison
Note à l'étudiant liaisonMarie Biscarat
 
Du côté du cdi 07 14oct
Du côté du cdi 07 14octDu côté du cdi 07 14oct
Du côté du cdi 07 14octClaudie Merlet
 
Du côté du cdi 08 21oct
Du côté du cdi 08 21octDu côté du cdi 08 21oct
Du côté du cdi 08 21octClaudie Merlet
 
Comprendre qu'est ce que sont et surtout à quoi servent les réseaux sociaux
Comprendre qu'est ce que sont et surtout à quoi servent les réseaux sociauxComprendre qu'est ce que sont et surtout à quoi servent les réseaux sociaux
Comprendre qu'est ce que sont et surtout à quoi servent les réseaux sociauxNextformation
 
La phase 1 de shopping
La phase 1 de shoppingLa phase 1 de shopping
La phase 1 de shoppingjguivarch
 
Présentation ebooks abf la filoche
Présentation ebooks abf la filochePrésentation ebooks abf la filoche
Présentation ebooks abf la filochejaloi
 
Réadaptation en toxicomanie pour adolescents - Portage Atlantique
Réadaptation en toxicomanie pour adolescents - Portage Atlantique Réadaptation en toxicomanie pour adolescents - Portage Atlantique
Réadaptation en toxicomanie pour adolescents - Portage Atlantique Portage
 
Bibliografia novembre 2011. Municipi Lector
Bibliografia novembre 2011. Municipi LectorBibliografia novembre 2011. Municipi Lector
Bibliografia novembre 2011. Municipi Lectoralsinafont
 
Genomewide Association between GLCCI1 and Response to Glucocorticoid Therapy ...
Genomewide Association between GLCCI1 and Responseto Glucocorticoid Therapy ...Genomewide Association between GLCCI1 and Responseto Glucocorticoid Therapy ...
Genomewide Association between GLCCI1 and Response to Glucocorticoid Therapy ...Jorge Rico
 
CapCom13: AT4: S'appuyer sur des porte-parole -part1
CapCom13: AT4: S'appuyer sur des porte-parole -part1CapCom13: AT4: S'appuyer sur des porte-parole -part1
CapCom13: AT4: S'appuyer sur des porte-parole -part1Cap'Com
 

Viewers also liked (20)

Monitoring Compteur EDF avec node.js
Monitoring Compteur EDF avec node.jsMonitoring Compteur EDF avec node.js
Monitoring Compteur EDF avec node.js
 
Hacking your Home @bdx.io
Hacking your Home @bdx.ioHacking your Home @bdx.io
Hacking your Home @bdx.io
 
Fotografies més boniques
Fotografies més boniquesFotografies més boniques
Fotografies més boniques
 
Powerpoint carriere
Powerpoint carrierePowerpoint carriere
Powerpoint carriere
 
Cable reference id #06 caracas3356
Cable reference id  #06 caracas3356Cable reference id  #06 caracas3356
Cable reference id #06 caracas3356
 
Cellfiliation
CellfiliationCellfiliation
Cellfiliation
 
Note à l'étudiant liaison
Note à l'étudiant liaisonNote à l'étudiant liaison
Note à l'étudiant liaison
 
Du côté du cdi 07 14oct
Du côté du cdi 07 14octDu côté du cdi 07 14oct
Du côté du cdi 07 14oct
 
Kirmi fixed
Kirmi fixedKirmi fixed
Kirmi fixed
 
Du côté du cdi 08 21oct
Du côté du cdi 08 21octDu côté du cdi 08 21oct
Du côté du cdi 08 21oct
 
Comprendre qu'est ce que sont et surtout à quoi servent les réseaux sociaux
Comprendre qu'est ce que sont et surtout à quoi servent les réseaux sociauxComprendre qu'est ce que sont et surtout à quoi servent les réseaux sociaux
Comprendre qu'est ce que sont et surtout à quoi servent les réseaux sociaux
 
Guide assurance pret
Guide assurance pretGuide assurance pret
Guide assurance pret
 
Introducción a proyectos-criterios
Introducción a proyectos-criteriosIntroducción a proyectos-criterios
Introducción a proyectos-criterios
 
La phase 1 de shopping
La phase 1 de shoppingLa phase 1 de shopping
La phase 1 de shopping
 
Présentation ebooks abf la filoche
Présentation ebooks abf la filochePrésentation ebooks abf la filoche
Présentation ebooks abf la filoche
 
Réadaptation en toxicomanie pour adolescents - Portage Atlantique
Réadaptation en toxicomanie pour adolescents - Portage Atlantique Réadaptation en toxicomanie pour adolescents - Portage Atlantique
Réadaptation en toxicomanie pour adolescents - Portage Atlantique
 
Bibliografia novembre 2011. Municipi Lector
Bibliografia novembre 2011. Municipi LectorBibliografia novembre 2011. Municipi Lector
Bibliografia novembre 2011. Municipi Lector
 
Genomewide Association between GLCCI1 and Response to Glucocorticoid Therapy ...
Genomewide Association between GLCCI1 and Responseto Glucocorticoid Therapy ...Genomewide Association between GLCCI1 and Responseto Glucocorticoid Therapy ...
Genomewide Association between GLCCI1 and Response to Glucocorticoid Therapy ...
 
Dlire Charly Killian Samuel
Dlire Charly Killian SamuelDlire Charly Killian Samuel
Dlire Charly Killian Samuel
 
CapCom13: AT4: S'appuyer sur des porte-parole -part1
CapCom13: AT4: S'appuyer sur des porte-parole -part1CapCom13: AT4: S'appuyer sur des porte-parole -part1
CapCom13: AT4: S'appuyer sur des porte-parole -part1
 

Similar to Monitoring d'un compteur EDF avec node.js @bdx.io

Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++cppfrug
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesXavier MARIN
 
CWIN17 Paris/ Field Worker, solution PAN LAN d’aide aux intervenants sur site
CWIN17 Paris/ Field Worker, solution PAN LAN d’aide aux intervenants sur siteCWIN17 Paris/ Field Worker, solution PAN LAN d’aide aux intervenants sur site
CWIN17 Paris/ Field Worker, solution PAN LAN d’aide aux intervenants sur siteCapgemini
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8lyonjug
 
gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!David Caramelo
 
gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !Carles Sistare
 
Diapo zig bee_amin_jan11_final
Diapo zig bee_amin_jan11_finalDiapo zig bee_amin_jan11_final
Diapo zig bee_amin_jan11_finalAmin Ferjani
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Kenny Dits
 
Tech-Meetup Smart Transport - Episode 02
Tech-Meetup Smart Transport - Episode 02Tech-Meetup Smart Transport - Episode 02
Tech-Meetup Smart Transport - Episode 02Laurent Dunys
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejsnaholyr
 
[FR] Capture vidéo avec HTML5
[FR] Capture vidéo avec HTML5[FR] Capture vidéo avec HTML5
[FR] Capture vidéo avec HTML5Thomas Bassetto
 
Firefox OS, le web de demain - Epita - 2014-06-06
Firefox OS, le web de demain - Epita - 2014-06-06Firefox OS, le web de demain - Epita - 2014-06-06
Firefox OS, le web de demain - Epita - 2014-06-06Frédéric Harper
 
Voodoo.io NodeJS Meetup - November 13
Voodoo.io NodeJS Meetup - November 13Voodoo.io NodeJS Meetup - November 13
Voodoo.io NodeJS Meetup - November 13Aymeric Roffé
 
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Bruno Bonnin
 
Firefox OS de la théorie à la pratique - OSDC
Firefox OS de la théorie à la pratique - OSDCFirefox OS de la théorie à la pratique - OSDC
Firefox OS de la théorie à la pratique - OSDCChristophe Villeneuve
 
vpn-site-a-site-avec-des-routeurs-cisco
 vpn-site-a-site-avec-des-routeurs-cisco vpn-site-a-site-avec-des-routeurs-cisco
vpn-site-a-site-avec-des-routeurs-ciscoCamara Assane
 

Similar to Monitoring d'un compteur EDF avec node.js @bdx.io (20)

Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
 
CWIN17 Paris/ Field Worker, solution PAN LAN d’aide aux intervenants sur site
CWIN17 Paris/ Field Worker, solution PAN LAN d’aide aux intervenants sur siteCWIN17 Paris/ Field Worker, solution PAN LAN d’aide aux intervenants sur site
CWIN17 Paris/ Field Worker, solution PAN LAN d’aide aux intervenants sur site
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8
 
gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!
 
gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !
 
Diapo zig bee_amin_jan11_final
Diapo zig bee_amin_jan11_finalDiapo zig bee_amin_jan11_final
Diapo zig bee_amin_jan11_final
 
HTML5 en projet
HTML5 en projetHTML5 en projet
HTML5 en projet
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?
 
Tech-Meetup Smart Transport - Episode 02
Tech-Meetup Smart Transport - Episode 02Tech-Meetup Smart Transport - Episode 02
Tech-Meetup Smart Transport - Episode 02
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejs
 
[FR] Capture vidéo avec HTML5
[FR] Capture vidéo avec HTML5[FR] Capture vidéo avec HTML5
[FR] Capture vidéo avec HTML5
 
Firefox OS, le web de demain - Epita - 2014-06-06
Firefox OS, le web de demain - Epita - 2014-06-06Firefox OS, le web de demain - Epita - 2014-06-06
Firefox OS, le web de demain - Epita - 2014-06-06
 
Voodoo.io NodeJS Meetup - November 13
Voodoo.io NodeJS Meetup - November 13Voodoo.io NodeJS Meetup - November 13
Voodoo.io NodeJS Meetup - November 13
 
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
 
Firefox OS de la théorie à la pratique - OSDC
Firefox OS de la théorie à la pratique - OSDCFirefox OS de la théorie à la pratique - OSDC
Firefox OS de la théorie à la pratique - OSDC
 
Vpn
VpnVpn
Vpn
 
vpn-site-a-site-avec-des-routeurs-cisco
 vpn-site-a-site-avec-des-routeurs-cisco vpn-site-a-site-avec-des-routeurs-cisco
vpn-site-a-site-avec-des-routeurs-cisco
 
_JCVFr
_JCVFr_JCVFr
_JCVFr
 

Monitoring d'un compteur EDF avec node.js @bdx.io

  • 1. Monitoring d'un compteur EDF avec Node.js @lhuet35 SOFTEAM Cadextan
  • 2. Qui suis-je • 10 ans de Java/Web • 4 ans de développement – Grosse SSII • 4 ans dans le bâtiment ! https://github.com/lhuet
  • 5. « Hacking » compteur EDF UART Rien n'est illégal dans ce montage (hacking != illégal) Liaison Téléinfo (Bornier client) Adaptateur « custom »
  • 6. Montage téléinfo • Composants – 1 optocoupleur (VISHAY SFH620A-2) – 2 résistances (1.2 kΩ – 3.3 kΩ)
  • 8. Cablage sur le compteur
  • 10. Protocole Teleinfo ● Liaison série 1200 7E1 – http://www.erdf.fr/medias/DTR_Racc_Comptage/ERDF-NOI-CPT_02E.pdf ADCO 000028290000 P OPTARIF BASE 0 ISOUSC 30 9 BASE 002247218 % PTEC TH.. $ IINST 003 Z IMAX 030 B PAPP 00630 * MOTDETAT 000000 B ADCO 000028290000 P OPTARIF BASE 0 ISOUSC 30 9 BASE 002247218 % PTEC TH.. $ IINST 003 Z IMAX 030 B PAPP 00630 * MOTDETAT 000000 B Exemple de trame (Tarif bleu)
  • 11. Module Teleinfo sur Node.js • https://github.com/lhuet/teleinfo-node var teleinfo = require('teleinfo'); var util = require('util'); // Exemple d'utilisation sur Raspberry Pi var trameEvents = teleinfo('/dev/ttyAMA0'); // Évt 'tramedecodee' pour chaque trame reçue trameEvents.on('tramedecodee', function (data) { // data : objet avec données validées (checksum) var teleinfo = require('teleinfo'); var util = require('util'); // Exemple d'utilisation sur Raspberry Pi var trameEvents = teleinfo('/dev/ttyAMA0'); // Évt 'tramedecodee' pour chaque trame reçue trameEvents.on('tramedecodee', function (data) { // data : objet avec données validées (checksum) console.log(util.inspect(data)); console.log(util.inspect(data)); }); });
  • 12. Module Teleinfo sur Node.js • Objet data { ADCO: '000000000000', { ADCO: '000000000000', OPTARIF: 'BASE', ISOUSC: 30, BASE: 6366719, PTEC: 'TH..', IINST: 1, IMAX: 30, PAPP: 300, MOTDETAT: '000000' } OPTARIF: 'BASE', ISOUSC: 30, BASE: 6366719, PTEC: 'TH..', IINST: 1, IMAX: 30, PAPP: 300, MOTDETAT: '000000' }
  • 13. Module Tarifbleu sur Node.js • https://github.com/lhuet/tarifbleu-node var var tarifbleu tarifbleu = = require('require('tarifbleu'); tarifbleu'); var var util util = = require('require('util'); util'); var var logger logger = = function function ((data) data) { { console.log(util.inspect(data)); console.log(util.inspect(data)); }; var info = tarifbleu('/dev/ttyAMA0', '00 * * * * *', }; var info = tarifbleu('/dev/ttyAMA0', '00 * * * * *', logger); setInterval(function() { console.log(info.getPuissanceApparente() + ' VA'); console.log(info.getIntensite() + ' A'); console.log(info.getIndex() + ' Wh'); }, 2000); logger); setInterval(function() { console.log(info.getPuissanceApparente() + ' VA'); console.log(info.getIntensite() + ' A'); console.log(info.getIndex() + ' Wh'); }, 2000);
  • 14. Module Tarifbleu sur Node.js • Objet reçu en paramètre de logger { imini: 1, { imini: 1, imaxi: 1, imoy: 1, pmini: 200, pmaxi: 210, pmoy: 208.57142857142858, index: 6401853, pinst: 210, iinst: 1 } imaxi: 1, imoy: 1, pmini: 200, pmaxi: 210, pmoy: 208.57142857142858, index: 6401853, pinst: 210, iinst: 1 }
  • 15. Application • MongoDB – SAAS – Aggregation framework • Node.js – Express + Liaison Téléinfo • AngularJS https://github.com/lhuet/teleinfo-app
  • 16. Stockage dans MongoDB { { "datetime" : ISODate("2013-12-29T21:38:00.521Z"), "indexcpt" : 6399600, "imoy" : 1, "imax" : 1, "pmoy" : 296.1538461538461, "pmax" : 300, "_id" : ObjectId("52c096386e463dd40cdc5ef2") } "datetime" : ISODate("2013-12-29T21:38:00.521Z"), "indexcpt" : 6399600, "imoy" : 1, "imax" : 1, "pmoy" : 296.1538461538461, "pmax" : 300, "_id" : ObjectId("52c096386e463dd40cdc5ef2") }
  • 17. Aggregation Framewoork • Ex : Puissance max par heure db.teleinfo.aggregate([ {$match: {datetime: db.teleinfo.aggregate([ {$match: {datetime: {$gte:ISODate('2014-02-16T00:00:00.000Z'), $lte:ISODate('2014-02-17T00:00:00.000Z')}}}, {$gte:ISODate('2014-02-16T00:00:00.000Z'), $lte:ISODate('2014-02-17T00:00:00.000Z')}}}, {$project: {mois:{'$month':'$datetime'}, {$project: {mois:{'$month':'$datetime'}, jour:{'$dayOfMonth':'$datetime'}, heure:{'$hour':'$datetime'}, minute:{'$minute':'$datetime'}, datetime:1, pmax:1}}, jour:{'$dayOfMonth':'$datetime'}, heure:{'$hour':'$datetime'}, minute:{'$minute':'$datetime'}, datetime:1, pmax:1}}, {$group: {_id:{mois:'$mois', jour:'$jour', heure:'$heure'}, {$group: {_id:{mois:'$mois', jour:'$jour', heure:'$heure'}, pmax:{$max:'$pmax'}}}, pmax:{$max:'$pmax'}}}, {$project: {$project: {heure:'$_id.heure', Pmax:1}}]) {heure:'$_id.heure', Pmax:1}}])
  • 18. Frontend Web • AngularJS – Rudimentaire pour le moment • Node.js – API REST Données → temps réels + Données consolidées • Build avec Gulp.js – Livereload serveur + client
  • 20. Liens utiles Repos Github – https://github.com/lhuet/teleinfo-node – https://github.com/lhuet/tarifbleu-node – https://github.com/lhuet/teleinfo-app • Blog – http://lhuet.github.io/blog/