Mise en place du projet "Cheap Powermeter" [Rasperry-Pi - GPIO - Python - PHP]

Mise en place du projet "Cheap Powermeter" [Rasperry-Pi - GPIO - Python - PHP].

Publié le 02/10/2013

Nous allons mettre en place le tutorial "Cheap Powermeter" de Søren afin de quantifier la consommation électrique d'une habitation à partir du signal émis par la diode se trouvant sur le compteur EDF avec un Raspberry-Pi et Python/LAMP. Cette installation est donc sans risque : on ne touche pas au courant fort.

Ce tutorial est une traduction française de l'article de Søren disponible à cette adresse : http://hyggeit.blogspot.fr/2013/04/super-cheap-web-enabled-power.html

Notre application vise à compter le nombre de clignotements de la diode du compteur EDF s'étant produit sur une durée. Par exemple : si notre diode s'est allumée 10 fois sur une heure, nous avons consommé 10 * 1 Watt/heure.

Le clignotement de la diode du compteur va nous indiquer la consommation d'un watt heure à partir d'un intervalle de temps.

Notre application va se décomposer de la façon suivante, en partant des couches basses (matériels) pour aller vers les couches hautes (logicielles) :

  • - Le dispositif "capteur" : le montage de la plaque d'essai composé de la cellule photovoltaïque et du condensateur, reliés aux ports GPIO du Raspberry-Pi.
  • - L'écouteur traitant les signaux des ports GPIO qui sera matérialisé sous la forme d'un script Python qui fera tourner une boucle while écoutant le signal du canal du port GPIO. Ce dernier va déclencher une entrée dans la base de données MySQL si le signal atteint un certain niveau correspondant à l'état éclairée de la diode du compteur EDF. Le condensateur va jouer un rôle de séquenceur et définir une pulsation avec sa charge/décharge.
  • - La base de données MySQL stockant les informations fournies par l'écouteur et sollicitée par le script Python.
  • - Le script PHP "front" appelant les données de la base et se chargeant du rendu du graphique de consommation par le biais de deux classes prévues à ces effets.

1 - Liste des éléments nécessaires pour l'installation

Matériels :

Logiciels :

  • - Python
  • - PHP
  • - Apache
  • - MySQL

La partie logicielle fonctionnera sur des couches Python et LAMP. L'installation de LAMP sur Debian est abordée dans cet article.

2 - Connexions port GPIO et planche d'essai

Raspberry-Pi GPIO

  • - Le port d'alimentation 3,3 V n°1 du GPIO (en haut à gauche) relié à la cellule photo-électrique.
  • - L'autre patte de la cellule photo-électrique est reliée à la borne positive du condensateur.
  • - La borne négative du condensateur est reliée au port n° 6 qui est la masse.
  • - La borne positive du condensateur est reliée au port n°12 du GPIO qui correspond au canal 1.

3 - Installation des pré-requis logiciels

Si vous n'avez pas Apache, MySQL et PHP déjà installé, se reporter au tutorial sur la mise en place de LAMP.

Nous allons donc installer nos logiciels via apt :

sudo apt-get install python-dev python-setuptools python-mysqldb apache2 sudo easy_install rpi.gpio

4 - Déploiement de l'application Cheappowermeter

On va télécharger l'application depuis la dropbox de Søren :

wget https://www.dropbox.com/s/xcb2ntrt2d3xlkd/Cheappowermeter.tar.gz 

Ensuite on va décompresser le fichier et le copier dans le repertoire www d'apache en prenant soin de supprimer le fichier index.html :


tar -xvvzf Cheappowermeter.tar.gz
cd /var/www sudo mkdir cheappowermeter
sudo cp Cheappowermeter/www/* /var/www/cheappowermeter -R
sudo rm /var/www/index.html
sudo chmod -R 777 cheappowermeter

On va créer le fichier de base de données dans Mysql :

Login dans console MySQL :

mysql -u root -p 

Création de la bdd et de l'utilisateur :


CREATE DATABASE measurepower;
CREATE USER 'measurepower'@'localhost' IDENTIFIED BY 'yourpasswordhere';
GRANT ALL ON measurepower.* TO 'measurepower'@'%';

Création de la table watthours :


use measurepower;
CREATE TABLE IF NOT EXISTS `watthours` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `datetime` datetime NOT NULL,
  `lightvalue` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id` (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;
exit

Edition des variables de connexion MySQL dans les scripts Python et PHP :

Python :

sudo nano /var/www/cheappowermeter/cheappowermeter-Python/readlight 

Changer la ligne suivante :

con = mdb.connect('localhost', 'measurepower', 'yourpasswordhere', 'measurepower'); 

PHP:

sudo nano /var/www/cheappowermeter/index.php 

Changer la ligne suivante :

$link = mysql_connect('localhost', 'measurepower', 'yourpasswordhere'); 

Paramètrage du l'exécution de l'écouteur "readlight" au démarrage du système :

sudo nano /etc/rc.local 

Ajouter avant "exit 0" à la dernière ligne :

/var/www/cheappowermeter-Python/./readlight & 

Important : Ne pas oublier de définir le vhost pour le dossier cheappowermeter dans apache.

5 - Calibrage et test de l'application

Nous allons calibrer la sensibilité du capteur photovoltaïque en ajustant la valeur suivante dans les fichiers readlight et debug :

if result<=150: 

Cette valeur défini le seuil de sensibilité à partir duquel un enregistrement en bdd sera effectué.

Nous allons pouvoir tester ce seuil en executant le script debug :

sudo /var/www/cheappowermeter/cheappowermeter-Python/./debug 

On peut voir dans notre terminal les valeurs s'afficher quand le seuil de luminosité est franchi. On a réussi donc à tester notre écouteur, on va pouvoir lancer le script readlight et lire nos mesures avec le script PHP et afficher notre résultat dans un navigateur.

Execution du script readlight en tache de fond :

sudo /var/www/cheappowermeter/cheappowermeter-Python/./readlight & 

Lancer votre navigateur et connectez vous à l'ip du Raspberry-Pi et vous devriez voir la page avec le graphique et l'historique de consommation.