Transcript
Page 1: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Monitoring d'un compteur EDFavec Node.js

@lhuet35SOFTEAM Cadextan

Page 2: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Qui suis-je ?

•9 ans de Java/Web chez

•4 ans de dév. dans une grosse SSII

•4 ans dans le bâtiment !

Page 3: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Résumé en images

Page 4: Monitoring Compteur EDF avec node.js

@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#MonitoringEdfNode

Hard

Page 5: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

« Hacking » compteur EDF

Rien n'est illégal dans ce montage (hacking != illégal)

UART

Liaison Téléinfo(Bornier client)

Adaptateur « custom »

Page 6: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Montage téléinfo

•Composants• 1 optocoupleur (VISHAY SFH620A-2)

• 2 résistances (1.2 kΩ – 3.3 kΩ)

Page 7: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Prototype

Coût ~ 2 €

Page 8: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Cablage sur le compteur

Page 9: Monitoring Compteur EDF avec node.js

@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#MonitoringEdfNode

Soft

Page 10: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Protocole Teleinfo

•Liaison série 1200 7E1 • http://www.erdf.fr/medias/DTR_Racc_Comptage/ERDF-NOI-CPT_02E.pdf

ADCO 000028290000 POPTARIF BASE 0ISOUSC 30 9BASE 002247218 %PTEC TH.. $IINST 003 ZIMAX 030 BPAPP 00630 *MOTDETAT 000000 B

ADCO 000028290000 POPTARIF BASE 0ISOUSC 30 9BASE 002247218 %PTEC TH.. $IINST 003 ZIMAX 030 BPAPP 00630 *MOTDETAT 000000 B

Exemple de trame(Tarif bleu)

Page 11: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Module Teleinfo sur Node.js

•https://github.com/lhuet/teleinfo-node

var teleinfo = require('teleinfo');var util = require('util');

// Exemple d'utilisation sur Raspberry Pivar trameEvents = teleinfo('/dev/ttyAMA0');

// Événement 'tramedecodee' pour chaque trame reçue du compteurtrameEvents.on('tramedecodee', function (data) { // data : objet avec les données validées (checksum) console.log(util.inspect(data));});

var teleinfo = require('teleinfo');var util = require('util');

// Exemple d'utilisation sur Raspberry Pivar trameEvents = teleinfo('/dev/ttyAMA0');

// Événement 'tramedecodee' pour chaque trame reçue du compteurtrameEvents.on('tramedecodee', function (data) { // data : objet avec les données validées (checksum) console.log(util.inspect(data));});

Page 12: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Module Teleinfo sur Node.js

•Objet data

{ ADCO: '000000000000', OPTARIF: 'BASE', ISOUSC: 30, BASE: 6366719, PTEC: 'TH..', IINST: 1, IMAX: 30, PAPP: 300, MOTDETAT: '000000' }

{ ADCO: '000000000000', OPTARIF: 'BASE', ISOUSC: 30, BASE: 6366719, PTEC: 'TH..', IINST: 1, IMAX: 30, PAPP: 300, MOTDETAT: '000000' }

Page 13: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Module Tarifbleu sur Node.js

•https://github.com/lhuet/tarifbleu-node

var tarifbleu = require('tarifbleu');var util = require('util');

var logger = function (data) {console.log(util.inspect(data));

};

var infoCompteur = tarifbleu('/dev/ttyAMA0', '00 * * * * *', logger);

setInterval(function() {console.log(infoCompteur.getPuissanceApparente() + ' VA');console.log(infoCompteur.getIntensite() + ' A');console.log(infoCompteur.getIndex() + ' Wh');

}, 2000);

var tarifbleu = require('tarifbleu');var util = require('util');

var logger = function (data) {console.log(util.inspect(data));

};

var infoCompteur = tarifbleu('/dev/ttyAMA0', '00 * * * * *', logger);

setInterval(function() {console.log(infoCompteur.getPuissanceApparente() + ' VA');console.log(infoCompteur.getIntensite() + ' A');console.log(infoCompteur.getIndex() + ' Wh');

}, 2000);

Page 14: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Module Tarifbleu sur Node.js

•Objet reçu en paramètre de logger

{ imini: 1, imaxi: 1, imoy: 1, pmini: 200, pmaxi: 210, pmoy: 208.57142857142858, index: 6401853, pinst: 210, iinst: 1 }

{ imini: 1, imaxi: 1, imoy: 1, pmini: 200, pmaxi: 210, pmoy: 208.57142857142858, index: 6401853, pinst: 210, iinst: 1 }

Page 15: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Application

•MongoDB• Stockage des données (SAAS)

• Aggregation Framework pour la consolidation

•Node.js• Serveur Express + Liaison Téléinfo

•AngularJS

•https://github.com/lhuet/teleinfo-app

Page 16: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

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")}

Page 17: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Aggregation Framework

•Ex : consommation journalière entre 2 datesdb.teleinfo.aggregate([{$match: {datetime: {$gte:ISODate('2014-02-16T00:00:00.000Z'), $lte:ISODate('2014-02-17T00:00:00.000Z')}}},{$project: {mois:{'$month':'$datetime'}, jour:{'$dayOfMonth':'$datetime'}, heure:{'$hour':'$datetime'}, minute:{'$minute':'$datetime'}, datetime:1, pmax:1}},{$group: {_id:{mois:'$mois', jour:'$jour', heure:'$heure'}, pmax:{$max:'$pmax'}}},{$project: {heure:'$_id.heure', Pmax:1}}])

db.teleinfo.aggregate([{$match: {datetime: {$gte:ISODate('2014-02-16T00:00:00.000Z'), $lte:ISODate('2014-02-17T00:00:00.000Z')}}},{$project: {mois:{'$month':'$datetime'}, jour:{'$dayOfMonth':'$datetime'}, heure:{'$hour':'$datetime'}, minute:{'$minute':'$datetime'}, datetime:1, pmax:1}},{$group: {_id:{mois:'$mois', jour:'$jour', heure:'$heure'}, pmax:{$max:'$pmax'}}},{$project: {heure:'$_id.heure', Pmax:1}}])

Page 18: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

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

Page 19: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Application Web

Page 20: Monitoring Compteur EDF avec node.js

@lhuet35#MonitoringEdfNode

Sites utiles

•Repos Githubhttps://github.com/lhuet/teleinfo-nodehttps://github.com/lhuet/tarifbleu-node https://github.com/lhuet/teleinfo-app

•Blog → http://lhuet.github.io/blog/

Page 21: Monitoring Compteur EDF avec node.js

@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#MonitoringEdfNode

Q & A


Top Related