Raspberry PI, RPIDOM, Python & MySQL

Cet article vous propose de mettre en place un collecteur Python de trame Téléinformation et d’envoyer l’information vers une base de données MySQL avec une carte Raspberry PI dotée d’une carte RPIDOM. La carte RPIDOM propose deux autres fonctionnalités comme l’horloge interne (RTC) et la gestion d’un bus 1-Wire facilement exploitable avec un serveur Owserver (OWFS). Pour rappel, les Raspberries PI n’ont pas d’horloge interne RTC (Real Time Clock), et sont donc  incapable de conserver l’heure et la date (lorsque redémarré),  s’ils n’ont pas de connexion internet disponible pour effectuer les mises à jours NTP (Network Time Protocol). Raspberry PI, RPIDOM, Python & MySQL

Pré-requis

Avant de commencer la mise en place de la solution vous devrez réunir les éléments suivant :

  • des connaissances informatique de niveau intermédiaire (Débutant / intermédiaire / Avancé) ;
  • le logiciel Putty (Connexion SSH) ;
  • 1 carte Raspberry PI (Sa SD et son alimentation) ;
  • 1 Carte RPIDOM (Yadom) ;
  • 1 Serveur MySQL sur un système distant ;
  • 1 compteur EDF avec la Téléinformation activée ;
  • 1 câble deux pôles pour la connexion I1I2 du compteur EDF ;
  • de l’huile de coude et 2 heures de votre temps.

Spécifications

La carte RPIDOM offre les fonctionnalités suivantes :

  • 2 connecteurs (I1I2) pour la Téléinformation de vos compteurs EDF ;
  • 1 connecteur bus 1-Wire ;
  • 1 horloge interne sauvegardée (RTC) ;
  • 1 connecteur d’alimentation;
  • 1 connecteur d’extensions GPIO ;

Préparation de la SD du Raspberry

Récupérer la dernière image officielle sur le site http://www.raspberrypi.org/downloads (fichier Wheezy Raspbian). Une fois décompressé, on obtient le fichier « *****-wheezy-raspbian.img ». Pour copier l’image officielle sur une carte SD, on peut utiliser l’outil open source Win32 Disk Imager .

Décompresser le fichier télécharger, puis lancer le programme Win32DiskImager :

Win32disk-manager

Dans le fenêtre ci-dessus, effectuer les étapes suivantes :

  1. Sélectionner le fichier source (dernière image officielle wheezy-raspbian.img) ;
  2. sélectionner le disque destination (SDcard insérée dans un port SD du PC ou un lecteur externe) ;
  3. lancer l’écriture en cliquant sur le bouton « Write » ;
  4. confirmer l’écriture en cliquant sur « Yes ».

L’opération d’écriture est assez longue (plusieurs minutes). A la fin de l’écriture, votre carte SD est prête à être utilisée dans la Raspberry Pi.

Configuration du Raspberry

Avant de mettre sous tension la Raspberry Pi, vous devez :

  • Insérer la carte SD précédemment générée ;
  • fixer la carte Rpidom sur la rapsberry PI (hors tension) ;
  • brancher un clavier USB et un écran HDMI (option) ;
  • brancher un câble ethernet relié au réseau de votre domicile (votre box internet par exemple).

A la mise sous tension apparaît l’écran de configuration initiale (sudo raspi-config).

Après avoir exécuté l’option 1 pour étendre le système de fichiers à l’intégralité de l’espace disponible  (à la prochaine mise sous tension, la partition sera étendue à la taille de votre carte SD), vous pouvez paramétrer les « Locales » avec le menu 4. Vous pouvez aussi vérifier que votre serveur de connexion SSH est activé avec l’option 8 + A4. De la même manière vous pourrez changer le mot de passe de votre session « PI ».

rpi-sudo-raspi-config-01

rpi-sudo-raspi-config-02

rpi-sudo-raspi-config-03

rpi-sudo-raspi-config-04

rpi-sudo-raspi-config-05-ssh-enable

rpi-sudo-raspi-config-06-ssh-enable

rpi-sudo-raspi-config-07-ssh-enable

rpi-sudo-raspi-config-08-set-password

rpi-sudo-raspi-config-09-set-password

Après toutes ces opérations, le reboot suivant est assez long en raison de l’opération d’extension de la partition (qui n’est faite qu’un seule fois). A la fin du démarrage (boot), il est enfin possible de se loguer avec le login «pi » et le mot de passe « raspberry » (si inchangé).

  1. Il est aussi judicieux de mettre à jour le système de votre Raspberry avec l’option 8 + A5.
  2. Vous pouvez aussi mettre à jour le Firmware de votre RPI avec le tutoriel de Korben.

Connexion au compteur EDF

La connexion de la carte d’extension RPIDOM est très simple à réaliser. Il suffit d’empiler la carte RPIDOM sur le Raspberry PI en respectant le sens logique des broches, mais bien entendu lorsque cette derniere n’est pas alimentée.

rpidom-connectiques rpidom-schema01

Il faudra ensuite relier une des deux entrées de Téléinformation (par exemple le bloc B) au compteur EDF avec deux fils. Il n’y a pas de polarité entre les deux fils Teleinfo01, I1 et I2.

teleinfo-I1I2

Une fois cette opération réalisée, l’installation logicielle pourra-t’être envisagée.

Installation logicielle de la carte RPIDOM

Le Manuel RPIDOM de Yadom est à l’origine du tutoriel ci-dessous, avec des compléments de captures d’écran.

Respecter la casse minuscule/majuscule des captures d’écran ou du manuel.

Connexion SSH (Console)

Depuis l’utilitaire Putty, se connecter à votre Raspberry en saisissant l’adresse IP (Tutoriel).

  • Identifiant : « pi »
  • Mot de passe : « raspberry »

Attention, si vous n’avez pas paramétré les « locales », le clavier ne sera pas reconnu en « AZERTY » mais en « QWERTY ». Ce qui signifie que le vous devrait frapper le mot de passe « rqspberry ».

putty-raspberrypi

Modification du fichier « cmdline.txt »
Commande : sudo nano /boot/cmdline.txt
  • « sudo » =  (abréviation de substitute user do, en anglais : « exécuter en se substituant à l’utilisateur »). Permet d’exécuter une commande en tant qu’administrateur.
  • « nano » = Éditeur de fichier texte.

rpidom-ssh01

remplacer la ligne :
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
par :
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
ou supprimer :
console=ttyAMA0,115200 kgdboc=ttyAMA0,115200

rpidom-ssh02

rpidom-ssh03

Modification du fichier « inittab »
Commande : sudo nano /etc/inittab
 T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

devient :

 #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

rpidom-ssh04

rpidom-ssh05

Redémarrage  du Raspberry
commande : sudo reboot

rpidom-ssh06

Configuration du port série
Commande : stty -F /dev/ttyAMA0 1200 sane evenp parenb cs7 clocal -crtscts 

Visualisation des données téléinformation du premier compteur :

Commande : echo A > /dev/ttyAMA0
Commande : cat /dev/ttyAMA0

On visualise les données envoyées par le premier compteur. Visualisation des données téléinformation du premier compteur :

Commande : echo B > /dev/ttyAMA0
Commande : cat /dev/ttyAMA0

On visualise les données envoyées par le second compteur.

rpidom-ssh07

rpidom-ssh08

Installation du serveur OWFS

OWFS est une interface web permettant de contrôler un bus 1-Wire.

Commande : sudo apt-get install owserver ow-shell owhttpd owfs-fuse

rpidom-ssh11

Activation du bus i2c sur lequel est branché l’interface 1wire

Editer le fichier /etc/modprobe.d/raspi-blacklist.conf

Commande : sudo nano /etc/modprobe.d/raspi-blacklist.conf

Commenter la ligne

#blacklist i2c-bcm2708

rpidom-ssh12

Editer le fichier /etc/modules

Commande : sudo nano /etc/modules

et ajouter la ligne : i2c-dev

rpidom-ssh13

Configuration du serveur OWFS

Il faut ensuite éditer le fichier /etc/owfs.conf et commenter la ligne 16 :

#server: FAKE = DS18S20,DS2405

rpidom-ssh14

Dé-commenter les lignes 32 et 33 (mountpoint = /mnt/1wire et allow_other)

rpidom-ssh14bis

et ajouter à la fin du fichier la ligne

device = /dev/i2c-1

rpidom-ssh15

Redémarrage du serveur :

Commande : sudo /etc/init.d/owserver restart

Si jamais on a un message « failed », il faut mettre /dev/i2c-0 dans fichier ci-dessus.

Création d’un point de montage et montage :

Commande : sudo mkdir /mnt/1wire/
Commande : sudo owfs -s localhost:4304 -m /mnt/1wire/ --allow_other

Vérification du fonctionnement du Serveur OWFS en allant à l’adresse http://<IP-RPI>:2121/ :

rpidom-owfs-01

Mise à jour YADOM

ATTENTION, avant de lancer la mise à jour, il est nécessaire que le port série soit disponible de façon exclusive pour la carte RPIDOM ou RPIDOM LITE (pas de console ou de tâche cron qui y accède, etc…)

Installer les paquets « python-serial » et « python-setuptool » :

commande : sudo apt-get install -y python-serial python-setuptool

Télécharger la mise à jour Yadom :

commande : wget http://www.yadom.fr/updates/update050413.tar

Décompresser l’archive Tar :

commande : tar -xf update050413.tar

Aller dans le répertoire de décompression :

commande : cd update

vérifier la disponibilité du port série :

commande : cat /dev/ttyAMA0

Si une erreur d’accès apparaît (at: /dev/ttyAMA0: Permission denied), c’est que le port série est toujours connecté à la console. Voir la documentation de la carte RPIDOM.

Lancer la mise à jour :

Attention, cette étape est assez courte, mais ne doit surtout pas être interrompue, sous peine de rendre la carte inutilisable.

commande : python update.py

Documentation officielle de mise à jour 050413

Préparation de la base de données MySQL

 Dictionnaire de données

Un dictionnaire des données est une collection de métadonnées ou de données de référence nécessaire à la conception d’une base de données relationnelle. Il revêt une importance stratégique particulière, car il est le vocabulaire commun de l’organisation. Il décrit des données aussi importantes que les clients, les nomenclatures de produits et de services, les annuaires, etc. C’est donc le référentiel principal de l’entreprise, sur lequel s’appuient les décisions de celle-ci. Il est souvent représenté par un tableau à quatre colonnes contenant le nom, le code et le type de donnée ainsi que des commentaires. (Sources : Wikipédia Fr)

Globalement, un dictionnaire de données est un document définissant la structure des tables d’une base de données (relationnelle).  Ce dictionnaire de données correspond à la définition de forme et de stockage de la donnée. Ce document sert dans un premier lieu à  créer une base de données, et servira ensuite au développeur pour créer des applications exploitant les données de la base. Ce dictionnaire s’appuie sur l’article Téléinformation.

dicodata

Créer une base de données MySQL avec PhpMyAdmin

Dans mon cas, la base de données s’appelle « consommation ».

rpidom-phpmyadmin-00

Mettre en place une table « T_TELEINFO » dans cette base de données

rpidom-phpmyadmin-00bis

  1. Se positionner sur la base de données en question ;
  2. sélectionner l’onglet « SQL » ;
  3. copier-coller le contenu du  fichier SQL ;
  4. exécuter la requête.

Installation de la librairie « python-mysqldb »

Commande : sudo apt-get install python-mysqldb

Vérifier le fonctionnement en console Python depuis une session SSH :

Connectez-vous au RPI puis lancer les commandes suivantes :

Commande : python
Commande : import MySQLdb

Si vous n’avez pas d’erreur on continu.

Programmer la collecte des données « Téléinformation »

Télécharger le fichier teleinfo-mysql.py :

Commande : cd /home/pi/rpidom/
Commande : wget  http://domotique-info.fr/wp-content/uploads/2013/06/teleinfo-mysql.py_.txt
Commande :  mv teleinfo-mysql.py_.txt teleinfo.py

Planifier l’exécution du fichier Python :

Commande : crontab -e

Ajouter la ligne suivante :

*/5 * * * * /usr/bin/python /home/pi/rpidom/teleinfo.py

Collecte toute le 5 minutes (= 12 par heure = 288 captures par jour)

Redémarrer « cron » :

Commande : sudo /etc/init.d/cron start

rpidom-python-crontab-01

Conclusion

Bien qu’il existe beaucoup de façons plus simple de collecter les Téléinformations, je vous ai présenté aujourd’hui une solution « fait le toi-même » (DIY) assez peu onéreuse (environ 80€). Il est à noter que le Raspberry peut aussi porter parallèlement d’autres solutions domotique, et donc amortir l’investissement. Cependant, j’avoue que le DIY dans ce cas est assez complexe et peu accessible au débutant.

Avec un peu d’acharnement, un débutant pourra y arriver. N’hésitez pas à poser vos questions.

Author: Sébastien Joly

Passionné de plongée, de voile croisière, de navigation, d'océans, de géomatique, de domotique, d'informatique ... des tictictics, je suis technophile un point c'est tout. Je m'intéresse à la domotique depuis plusieurs années mais je me suis lancé fin 2012 seulement. [ Accéder à mes articles ] [ Mon installation domotique ]

Share This Post On