Hacking your home

47
@lhuet35 #HackingHome Hacking your Home @lhuet35 SOFTEAM Cadextan

Transcript of Hacking your home

Page 1: Hacking your home

@lhuet35#HackingHome

Hacking your Home

@lhuet35SOFTEAM Cadextan

Page 2: Hacking your home

@lhuet35#HackingHome

Qu'allez-vous voir ?

•Du « Hacking »

•Du Hard

•Du Soft

•… et quelques idées bonus

Page 3: Hacking your home

@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

Page 4: Hacking your home
Page 5: Hacking your home
Page 6: Hacking your home
Page 7: Hacking your home

@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome

Hacking

 ?

Page 8: Hacking your home

@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. ”

Page 9: Hacking your home

@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 » ”

Page 10: Hacking your home

@lhuet35#HackingHome

Hacker - Wikipedia

“ Les motivations principales du hacker sont « la passion, le jeu, le plaisir, l’échange et le partage » ”

Page 11: Hacking your home

@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome

Stat

ion

mét

éo

Page 12: Hacking your home

@lhuet35#HackingHome

« Hacking » station météo

Liaison radio(433 / 868 MHz)

Page 13: Hacking your home

@lhuet35#HackingHome

« Hacking » station météo

Liaison radio(433 / 868 MHz)

Page 14: Hacking your home

@lhuet35#HackingHome

Passer du hard au soft

HopeRF RFM12b

Bus SPI

Page 15: Hacking your home

@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

Page 16: Hacking your home

@lhuet35#HackingHome

Montage avec Arduino UNO

http://openenergymonitor.org/emon/buildingblocks/rfm12b-wireless

Page 17: Hacking your home

@YourTwitterHandle@lhuet35#HackingHome

Démo

Page 18: Hacking your home

@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome

Hard

Page 19: Hacking your home

@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

Page 20: Hacking your home

@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

Page 21: Hacking your home

@lhuet35#HackingHome

Arduino « pinout »

UART

GPIO

EntréeAnalogiques

I2C

« Power »

Page 22: Hacking your home

@lhuet35#HackingHome

Multiples « périphériques »

Pression atmosphérique Température

Affichage Texte

Humidité

Affichage graphique+« Touch Screen » Caméra

Page 23: Hacking your home

@lhuet35#HackingHome

Pilotage « courant fort »

3,3V

GND

5V

GPIOAppareils 220 V

(Max 10A)

Page 24: Hacking your home

@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome

Sof

t

Page 25: Hacking your home

@lhuet35#HackingHome

Arduino IDE

Port série PC

Compilation

Upload

IDE écrit en Java

Page 26: Hacking your home

@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

Page 27: Hacking your home

@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

Page 28: Hacking your home

@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

Page 29: Hacking your home

@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

•...

Page 30: Hacking your home

@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

Page 31: Hacking your home

@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome

Compt

eur

EDF

Page 32: Hacking your home

@lhuet35#HackingHome

« Hacking » compteur EDF

Rien n'est illégal dans ce montage (hacking != illegal)

UART

Liaison Téléinfo(Bornier client)

Montage « custom »

Page 33: Hacking your home

@lhuet35#HackingHome

Montage téléinfo

RéalisationPrototype

Page 34: Hacking your home

@lhuet35#HackingHome

Cablage sur le compteur

Page 35: Hacking your home

@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)

Page 36: Hacking your home

@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));});

Page 37: Hacking your home

@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);

Page 38: Hacking your home

@lhuet35#HackingHome

Application

•MongoDB• Stockage des données (SAAS)

• Aggregation Framework pour la consolidation

•Node.js• Serveur Express (API REST)

• Liaison Téléinfo

Page 39: Hacking your home

@lhuet35#HackingHome

Frontend Web

•AngularJS• Rudimentaire pour le moment

•Build avec Gulp.js

• Livereload serveur + client

Page 40: Hacking your home

@lhuet35#HackingHome

Application Web

Page 41: Hacking your home

@YourTwitterHandle@lhuet35#HackingHome

Démo

Page 42: Hacking your home

@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome

Mon

tage

s

à ve

nir

Page 43: Hacking your home

@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

Page 44: Hacking your home

@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

Page 45: Hacking your home

@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome

Quelq

ues

poin

teur

s

Page 46: Hacking your home

@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/→

Page 47: Hacking your home

@YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome

Q & A