Hacking your Home @bdx.io

51

Click here to load reader

description

Venez voir comment "hacker" des objets de votre maison pour en faire des "objets connectés" en réutilisant vos compétences de développeur. Des exemples de montages et de code seront présentés, entre autres : - Comptage électrique (téléinfo) - Monitoring de température (hacking de station météo radio) - Contrôle d'équipements (Chauffage, VMC, Volets roulants, ...) - RaspberryPi, BeagleBone Black et Arduino seront les principaux ingrédients.

Transcript of Hacking your Home @bdx.io

Page 1: Hacking your Home @bdx.io

Hacking your Home@lhuet35SOFTEAM Cadextan

Page 2: Hacking your Home @bdx.io

Qu'allez-vous voir ?

• Du « Hacking »• Du Hard• Du Soft• … et quelques idées bonus

Page 3: Hacking your Home @bdx.io

Qui suis-je

• 10 ans de Java/Web • 4 ans de développement – Grosse SSII• 4 ans dans le bâtiment !

https://github.com/lhuet

Page 4: Hacking your Home @bdx.io

PleaseDO NOT TRYthis at home

Page 5: Hacking your Home @bdx.io

PLEASE

TRY THIS AT HOME

Page 6: Hacking your Home @bdx.io

Hacking ??

Page 7: Hacking your Home @bdx.io

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 8: Hacking your Home @bdx.io

Hacking - 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 9: Hacking your Home @bdx.io

Hacking - Wikipedia

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

Page 10: Hacking your Home @bdx.io

Station météo

Page 11: Hacking your Home @bdx.io

« Hacking » station météo

Liaison radio(433 / 868 MHz)

Page 12: Hacking your Home @bdx.io

« Hacking » station météo

Liaison radio(433 / 868 MHz)

Page 13: Hacking your Home @bdx.io

Passer du hard au soft

HopeRF RFM12b

Bus SPI

Page 14: Hacking your Home @bdx.io

Coté soft

• Arduino / JeeNode– Code C– Librairie JeeLabs

● Raspberry Pi– Code C– Driver Linux– Module Node.jshttps://github.com/jcw/jeelib

https://github.com/gkaindl/rfm12b-linux

Page 15: Hacking your Home @bdx.io

Montage Arduino

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

Page 16: Hacking your Home @bdx.io

Démo

Page 17: Hacking your Home @bdx.io

Hard

Page 18: Hacking your Home @bdx.io

2 grandes familles de cartes

• Microcontroleurs– Programme « flashé »– Code C (le + souvent)

• Cartes avec OS (Linux)– Souvent un SoC ARM– Choix du langage

Page 19: Hacking your Home @bdx.io

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 20: Hacking your Home @bdx.io

Arduino « pinout »

UART

GPIO

EntréeAnalogiques

I2C

« Power »

Page 21: Hacking your Home @bdx.io

Multiples « devices »

Pression atmosphérique Température Humidité

Affichage TexteAffichage graphique& « Touch Screen » Caméra

Page 22: Hacking your Home @bdx.io

Pilotage « courant fort »

Appareils 220 V

(Max 10A)

3,3V

GND

5V

GPIO

Page 23: Hacking your Home @bdx.io

Soft

Page 24: Hacking your Home @bdx.io

Arduino IDE

Compilation

UploadIDE écrit en Java

Port série

Page 25: Hacking your Home @bdx.io

Arduino Langage accessible→

/* 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); }

Page 26: Hacking your Home @bdx.io

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 27: Hacking your Home @bdx.io

Ecosystème Raspberry Pi

• C / C++– WiringPi– API bas niveau (gpio.h)

• Java– Java Embedded– Pi4J - http://pi4j.com/– Libulldog - http://libbulldog.org/

• JavaScript– Node.js et multiples modules

Page 28: Hacking your Home @bdx.io

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/onoff

• LCD Texte I2C– https://github.com/wilberforce/lcd-pcf8574

• ...

Page 29: Hacking your Home @bdx.io

Exemple Node.js

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('--- Bdx.io ---'); lcd.setCursor(0,1).print(' The place to be ! '); 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('--- Bdx.io ---'); lcd.setCursor(0,1).print(' The place to be ! '); setTimeout(function() { lcd.setCursor(0,1).print(' ') ; }});

Page 30: Hacking your Home @bdx.io

Compteur EDF

Page 31: Hacking your Home @bdx.io

« Hacking » compteur EDF

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

UART

Liaison Téléinfo(Bornier client)

Adaptateur « custom »

Page 32: Hacking your Home @bdx.io

Montage téléinfo

RéalisationPrototype

Page 33: Hacking your Home @bdx.io

Cablage sur le compteur

Page 34: Hacking your Home @bdx.io

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 35: Hacking your Home @bdx.io

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

// Évt 'tramedecodee' pour chaque trame reçuetrameEvents.on('tramedecodee', function (data) {// data : objet avec 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');

// Évt 'tramedecodee' pour chaque trame reçuetrameEvents.on('tramedecodee', function (data) {// data : objet avec données validées (checksum) console.log(util.inspect(data));});

Page 36: Hacking your Home @bdx.io

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 info = tarifbleu('/dev/ttyAMA0', '00 * * * * *', logger);

setInterval(function() {console.log(info.getPuissanceApparente() + ' VA');console.log(info.getIntensite() + ' A');console.log(info.getIndex() + ' Wh');

}, 2000);

var tarifbleu = require('tarifbleu');var util = require('util');

var logger = function (data) {console.log(util.inspect(data));

};

var info = tarifbleu('/dev/ttyAMA0', '00 * * * * *', logger);

setInterval(function() {console.log(info.getPuissanceApparente() + ' VA');console.log(info.getIntensite() + ' A');console.log(info.getIndex() + ' Wh');

}, 2000);

Page 37: Hacking your Home @bdx.io

Application

• MongoDB– SAAS– Aggregation framework

• Node.js– Express + Liaison Téléinfo

• AngularJS

https://github.com/lhuet/teleinfo-app

Page 38: Hacking your Home @bdx.io

Application Web

Page 39: Hacking your Home @bdx.io

Démo

Page 40: Hacking your Home @bdx.io

Réseau IoT « Low Cost »

Page 41: Hacking your Home @bdx.io

RS485 à la rescousse

• Liaison série– 32 « devices » sur le bus– 100kbit/s sur plus de 1000 m !

• « Low Cost »– 1 simple paire torsadée suffit– < 1.5 € les 5 sur ebay

Page 42: Hacking your Home @bdx.io

Cablage

MAX485 « Device »

PaireTorsadée

RésistanceTerminale

Page 43: Hacking your Home @bdx.io

Prototypage

Bus RS485d'environ 15 cm

MAX485

Page 44: Hacking your Home @bdx.io

… avec un fil de 100m

Page 45: Hacking your Home @bdx.io

Kit IoT Arduino ~ 2 €

Page 46: Hacking your Home @bdx.io

Montages

Page 47: Hacking your Home @bdx.io

Chauffage & ECS

• Ballon tri-énergie– Chauffage bois

– Panneaux solaires

– Résistance électrique

• A venir– Monitoring des températures

& circulateurs– Pilotage résistance

Page 48: Hacking your Home @bdx.io

Ecran supervision « familial »

• Supervision / Contrôle– Visualisation des consommations en « live »

– Aide à l'optimisation d'énergie

● Prototypage en cours

Arduino Pro Mini

Ecran LCD 2,2 "

Page 49: Hacking your Home @bdx.io

Quelques pointeurs

Page 50: Hacking your Home @bdx.io

Liens utiles

• « Learn Adafruit »– https://learn.adafruit.com

– Tutoriels Arduino / Raspberry Pi / Beaglebone

• Référence Linux embarqué– http://elinux.org– 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 51: Hacking your Home @bdx.io

Merci :-)

Questions ?