Hacking your home
-
Upload
laurenthuet -
Category
Devices & Hardware
-
view
1.213 -
download
8
Transcript of Hacking your home
@lhuet35#HackingHome
Hacking your Home
@lhuet35SOFTEAM 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
Hacking
?
@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
Stat
ion
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émo
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome
Hard
@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éeAnalogiques
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
GPIOAppareils 220 V
(Max 10A)
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome
Sof
t
@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
Compt
eur
EDF
@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éalisationPrototype
@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 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)
@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 Pivar trameEvents = teleinfo('/dev/ttyAMA0');
// Événement 'tramedecodee' pour chaque trame réç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 réçue du compteurtrameEvents.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émo
@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome
Mon
tage
s
à ve
nir
@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
Quelq
ues
poin
teur
s
@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