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.
7. Hacking - Wikipedia
“ Dans un sens large, le
bidouillage ou hacking
concerne les activités visant
à détourner un objet de
sa fonction première. ”
8. 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 » ”
9. Hacking - Wikipedia
“ Les motivations principales
du hacker sont « la passion,
le jeu, le plaisir, l’échange
et le partage » ”
18. 2 grandes familles de cartes
• Microcontroleurs
– Programme « flashé »
– Code C (le + souvent)
• Cartes avec OS (Linux)
– Souvent un SoC ARM
– Choix du langage
25. Arduino → Langage accessible
/* http://arduino.cc/en/Tutorial/AnalogInput */
int sensorPin = A0;
int ledPin = 13;
int sensorValue = 0;
void setup() {
/* 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);
}
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);
}
26. 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
27. 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
28. 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
• ...
29. 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 = 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);
var lcd = new LCD('/dev/i2c-0', 0x27);
boutonJaune.watch(function(err, value) {
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() {
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(' ') ;
}
});
lcd.setCursor(0,1).print(' ') ;
}
});
34. 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)
35. 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');
// Évt 'tramedecodee' pour chaque trame reçue
trameEvents.on('tramedecodee', function (data) {
// data : objet avec données validées (checksum)
var teleinfo = require('teleinfo');
var util = require('util');
// Exemple d'utilisation sur Raspberry Pi
var trameEvents = teleinfo('/dev/ttyAMA0');
// Évt 'tramedecodee' pour chaque trame reçue
trameEvents.on('tramedecodee', function (data) {
// data : objet avec données validées (checksum)
console.log(util.inspect(data));
console.log(util.inspect(data));
});
});
36. Module Tarifbleu sur Node.js
• https://github.com/lhuet/tarifbleu-node
var var tarifbleu tarifbleu = = require('require('tarifbleu');
tarifbleu');
var var util util = = require('require('util');
util');
var var logger logger = = function function ((data) data) {
{
console.log(util.inspect(data));
console.log(util.inspect(data));
};
var info = tarifbleu('/dev/ttyAMA0', '00 * * * * *',
};
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);
logger);
setInterval(function() {
console.log(info.getPuissanceApparente() + ' VA');
console.log(info.getIntensite() + ' A');
console.log(info.getIndex() + ' Wh');
}, 2000);
41. 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
47. Chauffage & ECS
• Ballon tri-énergie
– Chauffage bois
– Panneaux solaires
– Résistance électrique
• A venir
– Monitoring des températures
& circulateurs
– Pilotage résistance
48. 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 "