monitoring compteur edf avec node.js

Download Monitoring Compteur EDF avec node.js

Post on 01-Dec-2014

411 views

Category:

Devices & Hardware

10 download

Embed Size (px)

DESCRIPTION

Monitoring Compteur EDF avec node.js sur RaspberryPi / Beaglebone

TRANSCRIPT

  • 1. @lhuet35#MonitoringEdfNode Monitoring d'un compteur EDF avec Node.js @lhuet35 SOFTEAM Cadextan
  • 2. @lhuet35#MonitoringEdfNode Qui suis-je? 9 ans de Java/Web chez 4 ans de dv. dans une grosse SSII 4 ans dans le btiment!
  • 3. @lhuet35#MonitoringEdfNode Rsum en images
  • 4. @YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#MonitoringEdfNode H ard
  • 5. @lhuet35#MonitoringEdfNode Hacking compteur EDF Rien n'est illgal dans ce montage (hacking != illgal) UART Liaison Tlinfo (Bornier client) Adaptateur custom
  • 6. @lhuet35#MonitoringEdfNode Montage tlinfo Composants 1 optocoupleur (VISHAY SFH620A-2) 2 rsistances (1.2 k 3.3 k)
  • 7. @lhuet35#MonitoringEdfNode Prototype Cot ~ 2
  • 8. @lhuet35#MonitoringEdfNode Cablage sur le compteur
  • 9. @YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#MonitoringEdfNode Soft
  • 10. @lhuet35#MonitoringEdfNode Protocole Teleinfo Liaison srie 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. @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'); // vnement 'tramedecodee' pour chaque trame reue du compteur trameEvents.on('tramedecodee', function (data) { // data : objet avec les donnes valides (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'); // vnement 'tramedecodee' pour chaque trame reue du compteur trameEvents.on('tramedecodee', function (data) { // data : objet avec les donnes valides (checksum) console.log(util.inspect(data)); });
  • 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. @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. @lhuet35#MonitoringEdfNode Module Tarifbleu sur Node.js Objet reu en paramtre 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. @lhuet35#MonitoringEdfNode Application MongoDB Stockage des donnes (SAAS) Aggregation Framework pour la consolidation Node.js Serveur Express + Liaison Tlinfo AngularJS https://github.com/lhuet/teleinfo-app
  • 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. @lhuet35#MonitoringEdfNode Aggregation Framework Ex: consommation journalire 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. @lhuet35#MonitoringEdfNode Frontend Web AngularJS Rudimentaire pour le moment Node.js API REST Donnes temps rels + Donnes consolides Build avec Gulp.js Livereload serveur + client
  • 19. @lhuet35#MonitoringEdfNode Application Web
  • 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. @YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#MonitoringEdfNode Q & A