Relevé de compteur électrique ERDF avec un Raspberry Pi.
Aucune. Faites en ce que vous voulez.
Le système de Téléinfo disponible sur les compteurs électriques d'ERDF permettent de récupérer les données de consommation. Le montage décrit ci-dessous permet de récupérer automatiquement la consommation du compteur toutes les minutes et de l'afficher en ligne sur un graphe.
On utilise pour cela le même montage électronique que pour l'Arduino, basé sur un optocoupleur SFH620A.
On pourra se référer à d'autres site pour des détails sur le montage, comme celui-ci par exemple. J'ai toutefois constaté qu'ajouter une liaison à un PIN 3.3V du RPi (seule différence par rapport au montage pour Arduino) semble empêcher le système de fonctionner, la lecture des données n'étant plus fonctionnelle. N'y connaissant pas grand chose en électronique, la raison m'échappe...
La photo ci-dessous montre le système complet (compteur, RPi, petit montage électronique) branché et fonctionnel. Le RPi est connecté à internet via un dongle Wifi.
En termes de logiciel, le système fonctionne comme suit :
- Lecture des données du compteur sur le RPi via l'optocoupleur, toutes les minutes,
- Extraction et vérification des données utiles,
- Envoi des données sur un serveur via un GET,
- Extraction des données du GET et stockage dans une base de données,
- Affichage des données dans un graphe après extraction de la base.
Le code source est organisé autour des fichiers principaux suivants :
- lecture_teleinfo.py: ce script en Python réalise la lecture du flux envoyé par le compteur sur le Raspberry Pi, et extrait les données utiles : la consommation instantanée (PAPP, puissance apparente en VA, ici notée en W pour simplifier), et le tarif heure pleine ou creuse (PTEC).
- upload_data.php: ce script reçoit les données envoyées par le Raspberry Pi sur le serveur et les stocke dans une base de données MySQL.
- display.php: ce script sur le serveur extrait les données de la base de données MySQL et les affiche à l'aide de HighCharts.
- restart_wifi.sh : re-démarre l'interface wlan0 (wifi) si l'envoi des données échoue.
Sur le RPi :
- Copier le contenu des fichiers lecture_teleinfo.py et restart_wifi.sh dans des nouveaux fichiers dans le répertoire /home/pi.
- Dans ce fichier, modifier l'adresse du serveur et le mot de passe.
- Désactiver l'utilisation du port série par Linux, en suivant les instructions décrites ici.
- Lancer le script lecture_teleinfo.py à chaque minute via cron.
- Rendre le fichier restart_wifi.sh exécutable :
chmod +x restart_wifi.sh
Sur le serveur :
- Créer la base de données et la table comme indiqué plus dessous.
- Uploader les deux fichiers PHP, et modifier les logins/mdp pour l'accès à la base de données.
- Dans upload_data.php, modifier le mot de passe pour qu'il corresponde à celui entré sur le RPi.
La table MySQL est organisée comme le montre la figure ci-dessous.
Un exemple des résultats obtenus est visible dans la figure ci-dessous. Les données affichées sont la puissance instantanée consommée et le tarif (heures pleines ou creuses).
- Le code ci-dessous est fonctionnel, et a fonctionné pendant plusieurs jours consécutifs.
- Il n'est cependant clairement pas optimisé ni sécurisé.
- Par exemple, il n'y a pas de vérification du checksum, la boucle de lecture peut ne jamais s'arrêter, etc.
- Il s'agit donc d'un code de test, rien de plus.
Robin Roche - robinroche.com