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 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.