@lhuet35#MonitoringEdfNode
Monitoring d'un compteur EDF
avec Node.js
@lhuet35
SOFTEAM Cadextan
@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âtime...
@lhuet35#MonitoringEdfNode
Résumé en images
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#MonitoringEdfNode
H
ard
@lhuet35#MonitoringEdfNode
« Hacking » compteur EDF
Rien n'est illégal dans ce montage (hacking != illégal)
UART
Liaison T...
@lhuet35#MonitoringEdfNode
Montage téléinfo
•Composants
• 1 optocoupleur (VISHAY SFH620A-2)
• 2 résistances (1.2 kΩ – 3.3 ...
@lhuet35#MonitoringEdfNode
Prototype
Coût ~ 2 €
@lhuet35#MonitoringEdfNode
Cablage sur le compteur
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#MonitoringEdfNode
Soft
@lhuet35#MonitoringEdfNode
Protocole Teleinfo
•Liaison série 1200 7E1
• http://www.erdf.fr/medias/DTR_Racc_Comptage/ERDF-N...
@lhuet35#MonitoringEdfNode
Module Teleinfo sur Node.js
•https://github.com/lhuet/teleinfo-node
var teleinfo = require('tel...
@lhuet35#MonitoringEdfNode
Module Teleinfo sur Node.js
•Objet data
{ ADCO: '000000000000',
OPTARIF: 'BASE',
ISOUSC: 30,
BA...
@lhuet35#MonitoringEdfNode
Module Tarifbleu sur Node.js
•https://github.com/lhuet/tarifbleu-node
var tarifbleu = require('...
@lhuet35#MonitoringEdfNode
Module Tarifbleu sur Node.js
•Objet reçu en paramètre de logger
{ imini: 1,
imaxi: 1,
imoy: 1,
...
@lhuet35#MonitoringEdfNode
Application
•MongoDB
• Stockage des données (SAAS)
• Aggregation Framework pour la consolidatio...
@lhuet35#MonitoringEdfNode
Stockage dans MongoDB
{
"datetime" : ISODate("2013-12-29T21:38:00.521Z"),
"indexcpt" : 6399600,...
@lhuet35#MonitoringEdfNode
Aggregation Framework
•Ex : consommation journalière entre 2 dates
db.teleinfo.aggregate([
{$ma...
@lhuet35#MonitoringEdfNode
Frontend Web
•AngularJS
• Rudimentaire pour le moment
•Node.js
• API REST Données temps réels +...
@lhuet35#MonitoringEdfNode
Application Web
@lhuet35#MonitoringEdfNode
Sites utiles
•Repos Github
https://github.com/lhuet/teleinfo-node
https://github.com/lhuet/tari...
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#MonitoringEdfNode
Q
&
A
Prochain SlideShare
Chargement dans…5
×

Monitoring Compteur EDF avec node.js

1 468 vues

Publié le

Monitoring Compteur EDF avec node.js sur RaspberryPi / Beaglebone

Publié dans : Périphériques & matériel
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 468
Sur SlideShare
0
Issues des intégrations
0
Intégrations
84
Actions
Partages
0
Téléchargements
30
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Monitoring Compteur EDF avec node.js

  1. 1. @lhuet35#MonitoringEdfNode Monitoring d'un compteur EDF avec Node.js @lhuet35 SOFTEAM Cadextan
  2. 2. @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 !
  3. 3. @lhuet35#MonitoringEdfNode Résumé en images
  4. 4. @YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#MonitoringEdfNode H ard
  5. 5. @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 »
  6. 6. @lhuet35#MonitoringEdfNode Montage téléinfo •Composants • 1 optocoupleur (VISHAY SFH620A-2) • 2 résistances (1.2 kΩ – 3.3 kΩ)
  7. 7. @lhuet35#MonitoringEdfNode Prototype Coût ~ 2 €
  8. 8. @lhuet35#MonitoringEdfNode Cablage sur le compteur
  9. 9. @YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#MonitoringEdfNode Soft
  10. 10. @lhuet35#MonitoringEdfNode 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. 11. @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 Pi var trameEvents = teleinfo('/dev/ttyAMA0'); // Événement 'tramedecodee' pour chaque trame reçue du compteur trameEvents.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 Pi var trameEvents = teleinfo('/dev/ttyAMA0'); // Événement 'tramedecodee' pour chaque trame reçue du compteur trameEvents.on('tramedecodee', function (data) { // data : objet avec les données validées (checksum) console.log(util.inspect(data)); });
  12. 12. @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' }
  13. 13. @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);
  14. 14. @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 }
  15. 15. @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
  16. 16. @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") }
  17. 17. @lhuet35#MonitoringEdfNode Aggregation Framework •Ex : consommation journalière entre 2 dates 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}}]) 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}}])
  18. 18. @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
  19. 19. @lhuet35#MonitoringEdfNode Application Web
  20. 20. @lhuet35#MonitoringEdfNode Sites 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/
  21. 21. @YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#MonitoringEdfNode Q & A

×