Envoi automatique de production photovoltaïque

Envoyer sa production photovoltaïque sur BDPV peut s’avérer un peu difficile si l’on souhaite totalement l’automatiser. Nous allons voir comment avec un simple Raspberry Pi, il est possible de relever l’index d’un onduleur SMA en Bluetooth avec SBFspot et de stocker les données dans une base MySQL, puis, chaque nuit, d’envoyer le dernier index de production photovoltaïque sur le site www.bdpv.fr pour archiver la production et pouvoir la comparer aux installations alentour.

Schéma du réseau

Schéma du réseau - relève de la production photovoltaïque et envoi sur BDPV

Schéma du réseau – relève de la production et envoi sur BDPV

Considérations générales

Tout d’abord, installer un OS sur le Raspberry Pi. Pour ma part j’ai installé Raspbian.

Pour limiter la consommation d’énergie, je propose de désactiver le wifi dès le démarrage du Raspberry.

Tout d’abord, mettre en commentaire tout ce qui concerne le wifi dans le fichier de configuration du réseau /etc/network/interfaces, c’est-à-dire tout ce qui concerne wlan, et ne laisser que la configuration de l’interface loopback (lo) et l’interface ethernet (eth0). [Note pour moi : S’assurer que le DHCP est bien désactivé… pour que le Raspberry Pi ne change pas d’adresse IP.]

Puis, dans le fichier /etc/rc.local, ajouter les deux lignes suivantes à la fin :

#disable wifi
iwconfig wlan0 txpower off

Installation de SBFspot

Téléchargez les sources de SBFspot :
https://sbfspot.codeplex.com/SourceControl/list/changesets?branch=default

Vous pouvez ensuite le dézipper par exemple dans /home/pi.

$ tar -xzvf SBFspot_SRC_331_Linux_Win32.tar.gz

Certains paquets sont nécessaires pour pouvoir réaliser l’installation. Voici ceux que j’ai dû installer :

$ sudo apt-get install apt-transport-https
$ sudo apt-get install libboost-all-dev
$ sudo apt-get install libmysqlclient-dev
$ sudo apt-get install mysql-client

On réalise alors l’installation de SBFspot pour qu’il fonctionne avec une base MySQL :

$ sudo make install_mysql

J’ai réalisé l’installation dans /usr/local/bin.

Création de la base MySQL

Mon cas n’est pas forcément le plus fréquent, j’ai parmi mes serveur un serveur MySQL sur lequel j’ai créé la base pour SBFspot. Je crois que la base MySQL peut tout à fait être installée directement sur le Raspberry Pi si on installe le serveur MySQL (paquet mysql-server). Je ne donnerai pas plus d’infos sur cette partie.

Une fois la base créée (vide) sur le serveur MySQL, oscar.nonsenz.lan dans mon cas, on utilise les scripts fournis par SBFspot pour créer les tables et les users (CreateMySQLDB.sql et CreateMySQLUser.sql).

La configuration de la base de données (serveur, nom de la base, identifiant et mot de passe de l’utilisation) s’effectue dans le fichier SBFspot.cfg qui chez moi se trouve dans le répertoire /usr/local/bin/sbfspot.3. De même, l’identification de l’adresse MAC (BTAddress) d’ l’onduleur, le mot de passe pour la connexion Bluetooth, le nom de l’installation etc. sont à faire dans ce même fichier.

Pour récupérer l’adresse MAC bluetooth de l’onduleur SMA, vous pouvez lancer la commande :

$ hcitool scan

Tests du script SBFspot

Pour tester la tâche, vous pouvez lancer la commande suivante :

$ /usr/local/bin/sbfspot.3/SBFspot -v -nocsv

Normalement, si le fichier de configuration est bon, la récupération des informations en bluetooth dans l’onduleur SMA et l’écriture dans la base MySQL devrait s’effectuer.

Dans mon cas, une erreur SQL subsistait, et j’ai dû augmenter la taille du champ UserGroup de la table EventData. Toutefois, cette erreur n’était pas bloquante et n’empêchait nullement le script de se terminer.

Automatisation du script

Pour lancer la commande, j’ai créé un fichier /home/pi/scripts/SBFspot.sh :

#!/bin/bash
/usr/local/bin/sbfspot.3/SBFspot -v -nocsv

Et j’ai donné les droits d’exécution à ce script :

$ sudo chmod 755 SBFspot.sh

Et j’ai modifié le crontab pour que CRON lance ce script toutes les heures entre 6h00 et 23h00. Le contenu de mon crontab est le suivant :

0 6-23 * * * /home/pi/scripts/SBFspot.sh > /dev/null

Je ne sais plus pourquoi je suis passé par un script Bash intermédaire au lieu de lancer la commande directement dans le CRON. Cela fait presque un an que j’ai fait tout cela et je n’ai plus la mémoire très claire sur tous ces détails, je me fie à l’historique des commandes que j’ai tapées à l’époque.

Envoi de l’index de production photovoltaïque à BDPV

Donc toutes les heures, l’index de production photovoltaïque est inscrit dans notre base de données MySQL, il reste chaque nuit à lire le dernier index et à l’envoyer au site www.bdpv.fr sur lequel on aura préalablement créé un compte.

J’ai une machine dédiée à l’exécution de script mais le Raspberry Pi peut tout à fait réaliser cette tâche.

La requête SQL est placée dans un fichier getvalue.sql et a le contenu suivant :

SELECT Etotal FROM SpotData ORDER BY TimeStamp DESC LIMIT 1;

Le fichier du script, pushSMAindex.sh a le contenu suivant :

#!/bin/bash
DATA=$(/usr/bin/mysql -s -h [serveur_MySQL] -u [user] SBFspot < /root/bin/SMA-SB3000TL/getvalue.sql)
URL="http://www.bdpv.fr/_service/z_teleinfov2.php?util=[userBDPV]&mdp=[pwBDPV]&index="$DATA
/usr/bin/curl $URL

Les valeurs entre crochets sont à modifier par les informations correspondant à votre système. Par ailleurs, je ne passe pas de mot de passe car les « credentials » sont dans un fichier .my.cnf dans le répertoire personnel de l’utilisateur qui lance le CRON. C’est pratique et c’est expliqué ici :

https://dev.mysql.com/doc/refman/5.7/en/password-security-user.html

Reste à automatiser la tâche, on modifie le crontab avec la commande $ crontab -e :

30 2 * * * /root/bin/SMA-SB3000TL/pushSMAindex.sh

Ainsi, à 2h30 toutes les nuits, l’index de production photovoltaïque est envoyé à BDPV !

Quelques liens utiles

Site Raspberry pi : https://www.raspberrypi.org/
Site Raspbian : https://www.raspbian.org/
Site BDPV : http://www.bdpv.fr/fr/index.php
Site SBFspot : https://sbfspot.codeplex.com/

J’espère que ce how to vous sera utile. Si jamais vous constatez qu’il y a des erreurs, n’hésitez surtout pas à m’envoyer un mail, je ferai les corrections qui s’imposent.

Laisser un commentaire