9. @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 » ”
19. @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
26. @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
27. @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
28. @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
35. @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)
36. @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));
});
37. @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);