Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Hacking your home

1,596 views

Published on

Idées pour connecter sa maison (Compteur EDF, Station météo, ...)

Published in: Devices & Hardware
  • Login to see the comments

  • Be the first to like this

Hacking your home

  1. 1. @lhuet35#HackingHome Hacking your Home @lhuet35 SOFTEAM Cadextan
  2. 2. @lhuet35#HackingHome Qu'allez-vous voir ? •Du « Hacking » •Du Hard •Du Soft •… et quelques idées bonus
  3. 3. @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
  4. 4. @YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome H acking ?
  5. 5. @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. ”
  6. 6. @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 » ”
  7. 7. @lhuet35#HackingHome Hacker - Wikipedia “ Les motivations principales du hacker sont « la passion, le jeu, le plaisir, l’échange et le partage » ”
  8. 8. @YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome Station m étéo
  9. 9. @lhuet35#HackingHome « Hacking » station météo Liaison radio (433 / 868 MHz)
  10. 10. @lhuet35#HackingHome « Hacking » station météo Liaison radio (433 / 868 MHz)
  11. 11. @lhuet35#HackingHome Passer du hard au soft HopeRF RFM12b Bus SPI
  12. 12. @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
  13. 13. @lhuet35#HackingHome Montage avec Arduino UNO http://openenergymonitor.org/emon/buildingblocks/rfm12b-wireless
  14. 14. @YourTwitterHandle@lhuet35#HackingHome Dém o
  15. 15. @YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome H ard
  16. 16. @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
  17. 17. @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
  18. 18. @lhuet35#HackingHome Arduino « pinout » UART GPIO Entrée Analogiques I2C « Power »
  19. 19. @lhuet35#HackingHome Multiples « périphériques » Pression atmosphérique Température Affichage Texte Humidité Affichage graphique +« Touch Screen » Caméra
  20. 20. @lhuet35#HackingHome Pilotage « courant fort » 3,3V GND 5V GPIO Appareils 220 V (Max 10A)
  21. 21. @YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome Soft
  22. 22. @lhuet35#HackingHome Arduino IDE Port série PC Compilation Upload IDE écrit en Java
  23. 23. @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
  24. 24. @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
  25. 25. @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
  26. 26. @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 •...
  27. 27. @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
  28. 28. @YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome Com pteur ED F
  29. 29. @lhuet35#HackingHome « Hacking » compteur EDF Rien n'est illégal dans ce montage (hacking != illegal) UART Liaison Téléinfo (Bornier client) Montage « custom »
  30. 30. @lhuet35#HackingHome Montage téléinfo Réalisation Prototype
  31. 31. @lhuet35#HackingHome Cablage sur le compteur
  32. 32. @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)
  33. 33. @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)); });
  34. 34. @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);
  35. 35. @lhuet35#HackingHome Application •MongoDB • Stockage des données (SAAS) • Aggregation Framework pour la consolidation •Node.js • Serveur Express (API REST) • Liaison Téléinfo
  36. 36. @lhuet35#HackingHome Frontend Web •AngularJS • Rudimentaire pour le moment •Build avec Gulp.js • Livereload serveur + client
  37. 37. @lhuet35#HackingHome Application Web
  38. 38. @YourTwitterHandle@lhuet35#HackingHome Dém o
  39. 39. @YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome M ontages à venir
  40. 40. @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
  41. 41. @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
  42. 42. @YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome Q uelques pointeurs
  43. 43. @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/→
  44. 44. @YourTwitterHandle#DVXFR14{session hashtag} @lhuet35#HackingHome Q & A

×