SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
@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âtiment !
@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éléinfo
(Bornier client)
Adaptateur
« custom »
@lhuet35#MonitoringEdfNode
Montage téléinfo
•Composants
• 1 optocoupleur (VISHAY SFH620A-2)
• 2 résistances (1.2 kΩ – 3.3 kΩ)
@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-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)
@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));
});
@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'
}
@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);
@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
}
@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
@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")
}
@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}}])
@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
@lhuet35#MonitoringEdfNode
Application Web
@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/
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#MonitoringEdfNode
Q
&
A

Contenu connexe

En vedette

Conference MicroServices101 - 1ere partie
Conference MicroServices101 - 1ere partieConference MicroServices101 - 1ere partie
Conference MicroServices101 - 1ere partieZenika
 
Introduction to HTTP/2
Introduction to HTTP/2Introduction to HTTP/2
Introduction to HTTP/2Ido Flatow
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Jean-Michel Doudoux
 
Azure Business rules v0.3
Azure Business rules v0.3Azure Business rules v0.3
Azure Business rules v0.3Luca Mauri
 
Http2 les impacts dans le web
Http2 les impacts dans le webHttp2 les impacts dans le web
Http2 les impacts dans le webneuros
 
The Case for HTTP/2
The Case for HTTP/2The Case for HTTP/2
The Case for HTTP/2Andy Davies
 
Microbox : Ma toolbox microservices - Julien Roy
Microbox : Ma toolbox microservices - Julien RoyMicrobox : Ma toolbox microservices - Julien Roy
Microbox : Ma toolbox microservices - Julien Royekino
 
So, you wanna migrate to Java 9?
So, you wanna migrate to Java 9?So, you wanna migrate to Java 9?
So, you wanna migrate to Java 9?Tomek Adamczewki
 
Better Product Definition with Lean UX and Design Thinking
Better Product Definition with Lean UX and Design ThinkingBetter Product Definition with Lean UX and Design Thinking
Better Product Definition with Lean UX and Design ThinkingJeff Gothelf
 
Séminaire en ligne - Email Kinetic - 30 Mai 2017
Séminaire en ligne - Email Kinetic - 30 Mai 2017Séminaire en ligne - Email Kinetic - 30 Mai 2017
Séminaire en ligne - Email Kinetic - 30 Mai 2017Experian
 
Open Data v0.3
Open Data v0.3Open Data v0.3
Open Data v0.3Luca Mauri
 
Matinale DevOps / Docker
Matinale DevOps / DockerMatinale DevOps / Docker
Matinale DevOps / DockerZenika
 
HTTP/2 Changes Everything
HTTP/2 Changes EverythingHTTP/2 Changes Everything
HTTP/2 Changes EverythingLori MacVittie
 
Business intelligence v0.3
Business intelligence v0.3Business intelligence v0.3
Business intelligence v0.3Luca Mauri
 
Optimisez la performance de votre service client tout en maîtrisant votre b...
Optimisez la performance  de votre service client  tout en maîtrisant votre b...Optimisez la performance  de votre service client  tout en maîtrisant votre b...
Optimisez la performance de votre service client tout en maîtrisant votre b...Experian
 
NightClazz Java 8 Decouverte
NightClazz Java 8 DecouverteNightClazz Java 8 Decouverte
NightClazz Java 8 DecouverteZenika
 
What HTTP/2.0 Will Do For You
What HTTP/2.0 Will Do For YouWhat HTTP/2.0 Will Do For You
What HTTP/2.0 Will Do For YouMark Nottingham
 

En vedette (20)

Conference MicroServices101 - 1ere partie
Conference MicroServices101 - 1ere partieConference MicroServices101 - 1ere partie
Conference MicroServices101 - 1ere partie
 
Introduction to HTTP/2
Introduction to HTTP/2Introduction to HTTP/2
Introduction to HTTP/2
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017
 
Azure Business rules v0.3
Azure Business rules v0.3Azure Business rules v0.3
Azure Business rules v0.3
 
Http2 les impacts dans le web
Http2 les impacts dans le webHttp2 les impacts dans le web
Http2 les impacts dans le web
 
The Case for HTTP/2
The Case for HTTP/2The Case for HTTP/2
The Case for HTTP/2
 
Microbox : Ma toolbox microservices - Julien Roy
Microbox : Ma toolbox microservices - Julien RoyMicrobox : Ma toolbox microservices - Julien Roy
Microbox : Ma toolbox microservices - Julien Roy
 
So, you wanna migrate to Java 9?
So, you wanna migrate to Java 9?So, you wanna migrate to Java 9?
So, you wanna migrate to Java 9?
 
Better Product Definition with Lean UX and Design Thinking
Better Product Definition with Lean UX and Design ThinkingBetter Product Definition with Lean UX and Design Thinking
Better Product Definition with Lean UX and Design Thinking
 
How can your applications benefit from Java 9?
How can your applications benefit from Java 9?How can your applications benefit from Java 9?
How can your applications benefit from Java 9?
 
Séminaire en ligne - Email Kinetic - 30 Mai 2017
Séminaire en ligne - Email Kinetic - 30 Mai 2017Séminaire en ligne - Email Kinetic - 30 Mai 2017
Séminaire en ligne - Email Kinetic - 30 Mai 2017
 
Open Data v0.3
Open Data v0.3Open Data v0.3
Open Data v0.3
 
Matinale DevOps / Docker
Matinale DevOps / DockerMatinale DevOps / Docker
Matinale DevOps / Docker
 
HTTP/2 Changes Everything
HTTP/2 Changes EverythingHTTP/2 Changes Everything
HTTP/2 Changes Everything
 
JavaFX et le JDK9
JavaFX et le JDK9JavaFX et le JDK9
JavaFX et le JDK9
 
Business intelligence v0.3
Business intelligence v0.3Business intelligence v0.3
Business intelligence v0.3
 
Optimisez la performance de votre service client tout en maîtrisant votre b...
Optimisez la performance  de votre service client  tout en maîtrisant votre b...Optimisez la performance  de votre service client  tout en maîtrisant votre b...
Optimisez la performance de votre service client tout en maîtrisant votre b...
 
NightClazz Java 8 Decouverte
NightClazz Java 8 DecouverteNightClazz Java 8 Decouverte
NightClazz Java 8 Decouverte
 
Http2 right now
Http2 right nowHttp2 right now
Http2 right now
 
What HTTP/2.0 Will Do For You
What HTTP/2.0 Will Do For YouWhat HTTP/2.0 Will Do For You
What HTTP/2.0 Will Do For You
 

Similaire à Monitoring Compteur EDF avec node.js

Monitoring d'un compteur EDF avec node.js @bdx.io
Monitoring d'un compteur EDF avec node.js @bdx.ioMonitoring d'un compteur EDF avec node.js @bdx.io
Monitoring d'un compteur EDF avec node.js @bdx.iolaurenthuet
 
Hacking your Home @bdx.io
Hacking your Home @bdx.ioHacking your Home @bdx.io
Hacking your Home @bdx.iolaurenthuet
 
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
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JSAntoine Rey
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8lyonjug
 
TIAD : Choisir et construire son projet d’automatisation
TIAD : Choisir et construire son projet d’automatisationTIAD : Choisir et construire son projet d’automatisation
TIAD : Choisir et construire son projet d’automatisationThe Incredible Automation Day
 
Solaire control td
Solaire control tdSolaire control td
Solaire control tdfgaheneau
 
gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !Carles Sistare
 
gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!David Caramelo
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Kenny Dits
 
Développer sereinement avec Node.js
Développer sereinement avec Node.jsDévelopper sereinement avec Node.js
Développer sereinement avec Node.jsJulien Giovaresco
 
Siad dd-2010-para
Siad dd-2010-paraSiad dd-2010-para
Siad dd-2010-paraNawel Berka
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance frontJean-Pierre Vincent
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introductionneuros
 
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Benoît de CHATEAUVIEUX
 
Alphorm.com Formation CCNP ENCOR 350-401 (5/8) : Architecture
Alphorm.com Formation CCNP ENCOR 350-401 (5/8) : ArchitectureAlphorm.com Formation CCNP ENCOR 350-401 (5/8) : Architecture
Alphorm.com Formation CCNP ENCOR 350-401 (5/8) : ArchitectureAlphorm
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejsnaholyr
 
Ateliers de base en Arduino (Carte Arduino Uno, Capteurs, Actionneurs))
Ateliers de base en Arduino (Carte Arduino Uno, Capteurs, Actionneurs))Ateliers de base en Arduino (Carte Arduino Uno, Capteurs, Actionneurs))
Ateliers de base en Arduino (Carte Arduino Uno, Capteurs, Actionneurs))Fatima Zahra Fagroud
 

Similaire à Monitoring Compteur EDF avec node.js (20)

Monitoring d'un compteur EDF avec node.js @bdx.io
Monitoring d'un compteur EDF avec node.js @bdx.ioMonitoring d'un compteur EDF avec node.js @bdx.io
Monitoring d'un compteur EDF avec node.js @bdx.io
 
Hacking your Home @bdx.io
Hacking your Home @bdx.ioHacking your Home @bdx.io
Hacking your Home @bdx.io
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
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++
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JS
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8
 
TIAD : Choisir et construire son projet d’automatisation
TIAD : Choisir et construire son projet d’automatisationTIAD : Choisir et construire son projet d’automatisation
TIAD : Choisir et construire son projet d’automatisation
 
Solaire control td
Solaire control tdSolaire control td
Solaire control td
 
gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !
 
gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?
 
Développer sereinement avec Node.js
Développer sereinement avec Node.jsDévelopper sereinement avec Node.js
Développer sereinement avec Node.js
 
Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
 
Siad dd-2010-para
Siad dd-2010-paraSiad dd-2010-para
Siad dd-2010-para
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance front
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introduction
 
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
 
Alphorm.com Formation CCNP ENCOR 350-401 (5/8) : Architecture
Alphorm.com Formation CCNP ENCOR 350-401 (5/8) : ArchitectureAlphorm.com Formation CCNP ENCOR 350-401 (5/8) : Architecture
Alphorm.com Formation CCNP ENCOR 350-401 (5/8) : Architecture
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejs
 
Ateliers de base en Arduino (Carte Arduino Uno, Capteurs, Actionneurs))
Ateliers de base en Arduino (Carte Arduino Uno, Capteurs, Actionneurs))Ateliers de base en Arduino (Carte Arduino Uno, Capteurs, Actionneurs))
Ateliers de base en Arduino (Carte Arduino Uno, Capteurs, Actionneurs))
 

Monitoring Compteur EDF avec node.js