Hacking your home

1 164 vues

Publié le

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

Publié dans : Périphériques & matériel
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 164
Sur SlideShare
0
Issues des intégrations
0
Intégrations
50
Actions
Partages
0
Téléchargements
19
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

×