@lhuet35#HackingHome
Hacking your Home
@lhuet35
SOFTEAM Cadextan
@lhuet35#HackingHome
Qu'allez-vous voir ?
•Du « Hacking »
•Du Hard
•Du Soft
•… et quelques idées bonus
@lhuet35#HackingHome
Qui suis-je ?
•9 ans de Java/Web chez
•4 ans de développement dans une grosse SSII
•4 ans dans le bâtiment !
https://github.com/lhuet
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome
H
acking ?
@lhuet35#HackingHome
Hacking - Wikipedia
“ Dans un sens large, le
bidouillage ou hacking concerne
les activités visant à détourner un
objet de sa fonction première. ”
@lhuet35#HackingHome
Hacker - Wikipedia
“ Derrière le terme hacker « se
cachent des utilisateurs à part,
qui préfèrent fouiller dans les
entrailles d’un ordinateur plutôt
que simplement l’utiliser » ”
@lhuet35#HackingHome
Hacker - Wikipedia
“ Les motivations principales du
hacker sont « la passion, le jeu, le
plaisir, l’échange et le partage » ”
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome
Station
m
étéo
@lhuet35#HackingHome
« Hacking » station météo
Liaison radio
(433 / 868 MHz)
@lhuet35#HackingHome
« Hacking » station météo
Liaison radio
(433 / 868 MHz)
@lhuet35#HackingHome
Passer du hard au soft
HopeRF RFM12b
Bus SPI
@lhuet35#HackingHome
Coté soft
•Arduino / JeeNode
•Code C
•Librairie JeeLabs
•Raspberri Pi
•Code C
•Driver Linux
•Module Node.js
https://github.com/gkaindl/rfm12b-linux
https://github.com/jcw/jeelib
@lhuet35#HackingHome
Montage avec Arduino UNO
http://openenergymonitor.org/emon/buildingblocks/rfm12b-wireless
@YourTwitterHandle@lhuet35#HackingHome
Dém
o
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome
H
ard
@lhuet35#HackingHome
2 grandes familles de cartes
•Microcontrôleurs
•Programme « flashé »
•Code C le plus souvent
•Cartes avec Linux embarqué
•Souvent avec un SoC ARM
•Langage au choix
@lhuet35#HackingHome
Connecteur Raspberry Pi
•GPIO
•Entrées / Sorties
•PWM
•Liaisons série
•UART
•SPI
•I2C
UART
I2C
SPI
SPI
http://elinux.org/Rpi_Low-level_peripherals
@lhuet35#HackingHome
Arduino « pinout »
UART
GPIO
Entrée
Analogiques
I2C
« Power »
@lhuet35#HackingHome
Multiples « périphériques »
Pression
atmosphérique Température
Affichage Texte
Humidité
Affichage graphique
+« Touch Screen » Caméra
@lhuet35#HackingHome
Pilotage « courant fort »
3,3V
GND
5V
GPIO
Appareils 220 V
(Max 10A)
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome
Soft
@lhuet35#HackingHome
Arduino IDE
Port série PC
Compilation
Upload
IDE écrit en Java
@lhuet35#HackingHome
/* http://arduino.cc/en/Tutorial/AnalogInput */
int sensorPin = A0;
int ledPin = 13;
int sensorValue = 0;
void setup() {
pinMode(ledPin, OUTPUT); // config. du pin en sortie
}
void loop() {
sensorValue = analogRead(sensorPin);
digitalWrite(ledPin, HIGH); // Led allumée
delay(sensorValue);
digitalWrite(ledPin, LOW); // Led éteinte
delay(sensorValue);
}
/* http://arduino.cc/en/Tutorial/AnalogInput */
int sensorPin = A0;
int ledPin = 13;
int sensorValue = 0;
void setup() {
pinMode(ledPin, OUTPUT); // config. du pin en sortie
}
void loop() {
sensorValue = analogRead(sensorPin);
digitalWrite(ledPin, HIGH); // Led allumée
delay(sensorValue);
digitalWrite(ledPin, LOW); // Led éteinte
delay(sensorValue);
}
Arduino → Langage accessible
@lhuet35#HackingHome
Ecosystème Arduino
•Nombreuses librairies
• Presque une librairie par capteur !
• http://arduino.cc/en/Reference/Libraries
•Firmata « Firmware » prêt à l'emploi→
• Protocole Firmata - http://firmata.org/wiki/Protocol
• Nombreuses implémentations (Java, C, Python, JavaScript, Ruby, ...)
•Couplage aisé avec Raspberry Pi
@lhuet35#HackingHome
Ecosystème Raspberry Pi
•C / C++
• WiringPi
• API bas niveau (gpio.h)
•Java
• Java Embedded
• Pi4J - https://github.com/Pi4J/pi4j/
•JavaScript
• Node.js et de multiples modules
@lhuet35#HackingHome
Nombreux modules Node.js
•Port série → https://github.com/voodootikigod/node-serialport
•Firmata → https://github.com/jgautier/firmata
•GPIO → https://www.npmjs.org/package/onof
•LCD Texte I2C → https://github.com/wilberforce/lcd-pcf8574
•Teleinfo → https://github.com/lhuet/teleinfo-node
•...
@lhuet35#HackingHome
var LCD = require('lcd-pcf8574');
var Gpio = require('onoff').Gpio;
var ledRouge = new Gpio(22, 'out');
var boutonJaune = new Gpio(23, 'in', 'falling');
var lcd = new LCD('/dev/i2c-0', 0x27);
boutonJaune.watch(function(err, value) {
ledRouge.write(0);
lcd.setCursor(0,0).print('-- Devoxx France --');
lcd.setCursor(0,1).print(' Bouton appuyé ! ');
setTimeout(function() {
lcd.setCursor(0,1).print(' ') ;
}
});
var LCD = require('lcd-pcf8574');
var Gpio = require('onoff').Gpio;
var ledRouge = new Gpio(22, 'out');
var boutonJaune = new Gpio(23, 'in', 'falling');
var lcd = new LCD('/dev/i2c-0', 0x27);
boutonJaune.watch(function(err, value) {
ledRouge.write(0);
lcd.setCursor(0,0).print('-- Devoxx France --');
lcd.setCursor(0,1).print(' Bouton appuyé ! ');
setTimeout(function() {
lcd.setCursor(0,1).print(' ') ;
}
});
Exemple Node.js
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome
Com
pteur
ED
F
@lhuet35#HackingHome
« Hacking » compteur EDF
Rien n'est illégal dans ce montage (hacking != illegal)
UART
Liaison Téléinfo
(Bornier client)
Montage
« custom »
@lhuet35#HackingHome
Montage téléinfo
Réalisation
Prototype
@lhuet35#HackingHome
Cablage sur le compteur
@lhuet35#HackingHome
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#HackingHome
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 réç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 réçue du compteur
trameEvents.on('tramedecodee', function (data) {
// data : objet avec les données validées (checksum)
console.log(util.inspect(data));
});
@lhuet35#HackingHome
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#HackingHome
Application
•MongoDB
• Stockage des données (SAAS)
• Aggregation Framework pour la consolidation
•Node.js
• Serveur Express (API REST)
• Liaison Téléinfo
@lhuet35#HackingHome
Frontend Web
•AngularJS
• Rudimentaire pour le moment
•Build avec Gulp.js
• Livereload serveur + client
@lhuet35#HackingHome
Application Web
@YourTwitterHandle@lhuet35#HackingHome
Dém
o
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome
M
ontages
à
venir
@lhuet35#HackingHome
Chaufage & ECS
•Ballon avec 3 sources d'énergie
• Chauffage bois
• Panneau solaire
• Résistance électrique
•A venir
• Monitoring températures Optimisation conso.→
• Pilotage résistance
@lhuet35#HackingHome
Écran « familial »
•Supervision / Contrôle
• Visualisation des consommations en « live »
• Aide à l'optimisation d'énergie
•Écrans en cours de tests
Ecran 2,2 "
Ecran 3,2 "
tactile
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome
Q
uelques
pointeurs
@lhuet35#HackingHome
Liens utiles
•« Learn Adafruit » → https://learn.adafruit.com
• Tutoriels Arduino / Raspberry Pi / Beaglebone
•Référence eLinux.org → http://elinux.org/Main_Page
• Nombreux articles Soft & Hard
• Utiles pour le « Troubleshooting »
•Blogs
• Le mien ;-) → http://lhuet.github.io/blog/
• Celui d'Alexandre 
http://alex.thomazo.info/2013/06/16/premiers-pas-avec-un-jeenode/→
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome
Q
&
A

Hacking your home