Hacking your Home @bdx.io
Click here to load reader
-
Upload
laurenthuet -
Category
Technology
-
view
786 -
download
1
description
Transcript of Hacking your Home @bdx.io
Hacking your Home@lhuet35SOFTEAM Cadextan
Qu'allez-vous voir ?
• Du « Hacking »• Du Hard• Du Soft• … et quelques idées bonus
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
PleaseDO NOT TRYthis at home
PLEASE
TRY THIS AT HOME
Hacking ??
Hacking - Wikipedia
“ Dans un sens large, le bidouillage ou hacking concerne les activités visant à détourner un objet de sa fonction première. ”
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 » ”
Hacking - Wikipedia
“ Les motivations principales du hacker sont « la passion, le jeu, le plaisir, l’échange et le partage » ”
Station météo
« Hacking » station météo
Liaison radio(433 / 868 MHz)
« Hacking » station météo
Liaison radio(433 / 868 MHz)
Passer du hard au soft
HopeRF RFM12b
Bus SPI
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
Montage Arduino
http://openenergymonitor.org/emon/buildingblocks/rfm12b-wireless
Démo
Hard
2 grandes familles de cartes
• Microcontroleurs– Programme « flashé »– Code C (le + souvent)
• Cartes avec OS (Linux)– Souvent un SoC ARM– Choix du langage
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
Arduino « pinout »
UART
GPIO
EntréeAnalogiques
I2C
« Power »
Multiples « devices »
Pression atmosphérique Température Humidité
Affichage TexteAffichage graphique& « Touch Screen » Caméra
Pilotage « courant fort »
Appareils 220 V
(Max 10A)
3,3V
GND
5V
GPIO
Soft
Arduino IDE
Compilation
UploadIDE écrit en Java
Port série
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); }
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
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
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
• ...
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(' ') ; }});
Compteur EDF
« Hacking » compteur EDF
Rien n'est illégal dans ce montage (hacking != illégal)
UART
Liaison Téléinfo(Bornier client)
Adaptateur « custom »
Montage téléinfo
RéalisationPrototype
Cablage sur le compteur
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)
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));});
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);
Application
• MongoDB– SAAS– Aggregation framework
• Node.js– Express + Liaison Téléinfo
• AngularJS
https://github.com/lhuet/teleinfo-app
Application Web
Démo
Réseau IoT « Low Cost »
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
Cablage
MAX485 « Device »
PaireTorsadée
RésistanceTerminale
Prototypage
Bus RS485d'environ 15 cm
MAX485
… avec un fil de 100m
Kit IoT Arduino ~ 2 €
Montages
Chauffage & ECS
• Ballon tri-énergie– Chauffage bois
– Panneaux solaires
– Résistance électrique
• A venir– Monitoring des températures
& circulateurs– Pilotage résistance
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 "
Quelques pointeurs
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/
Merci :-)
Questions ?