PvMonit – Monitoring de mon installation photovoltaïque autonome
Cet article fait suite à la réalisation de mon installation électrique solaire autonome. Je suis très content de celle-ci, seulement j’ai un grand besoin de maîtrise, et ne pas savoir tout ce qui se passait dans ces petites boîtes bleues me taraudait… Il fallait que je monitor. Coup de chance, les appareils Victron que j’ai installés peuvent se connecter à un ordinateur avec les câbles VE Direct USB.
En bon libriste que je suis, j’ai vite découvert OpenEnergyMonitor project. J’ai failli craquer pour un emonPi – Solar PV mais ça ne correspondait pas complètement à mes contraintes. J’ai donc pris mes petits doigts et j’ai pondu PvMonit.
PvMonit C’est quoi ?
PvMonit c’est donc un petit logiciel de monitoring photovoltaïque pour matériel Victron compatible Ve.direct (USB), particulièrement adapté pour les installations autonomes. Il permet une vue « en direct » et un export de l’historique vers emoncms (une branche d’OpenEnergyMonitor project).
Exemple d’usage de PvMonit (le mien) : je dispose d’un RaspberryPi (mini ordinateur qui ne consomme que ~3W), mes appareils Victron (MPTT, BMV) sont connectés avec des câbles VE.Direct USB. PvMonit est installé sur ce RaspberryPi et me permet :
- D’afficher les informations en temps réel sur une page web (local)
- Une copie de cette page est faite toutes les heures (si la connexion internet est allumée) et est accessible ici : http://demo.zici.fr/PvMonit/
- De collecter les données toutes les X minutes et les expédier vers emoncms quand internet est là (le wifi n’étant pas toujours allumé)
- Mon tableau de bord est visible ici : http://emoncms.mercereau.info/dashboard/view?id=1
Des images :
Installation de PvMonit
Le matériel
Il vous faudra pour suivre ce tuto :
- Un ordinateur faible consommation configuré sous Debian ou un dérivé type Ubuntu/Raspbian (j’ai fait un article sur l’installation de mon Raspberry PI) 68€ (d’occasion avec coque, ventilateur, carte SD)
- Les câbles Ve.Direct USB connectés à vos appareils 30€ (x3 car 3 appareils à connecter)
- En option :
- Une sonde de température USB pour contrôler la température du local où vivent les batteries. J’utilise « thermomètre USB TEMPer » qui coûte entre 5 et 20€, (ils en parlent ici)
- Une pince ampèremètre USB pour contrôler la consommation de l’habitat. J’utilise la Aviosys 8870 à 27€ quand même, mais il ne semble pas y avoir beaucoup de concurrence pour ce type de produit… (j’en parle ici)
Voici le schéma de mon installation avec le câblage pour PvMonit incorporé :
Et voilà dans la vraie vie :
Le logiciel : Installation de PvMonit
Requis
- Linux (le tutoriel ci-dessous est prévu pour Debian/Rasbian/Ubuntu like)
- PHP (5.6 minimum)
- Lighttpd/Apache (ou autre serveur web)
- Perl
- Python
Installation
PvMonit dispose de deux fonctions dissociées et indépendantes que je vais distinguer :
- Interface en temps réel
- Export vers emoncms
Il y a bien sûr une base commune :
La base / le socle
Installation de PvMonit via le dépôt git et de ses dépendances :
aptitude install php-cli git python-serial sudo cd /opt git clone https://github.com/kepon85/PvMonit.git cp config-default.php config.php
Vous pouvez maintenant éditer le fichier config.php à votre guise !
Test du script vedirect.py : branchez un appareil Victron avec un Câble Ve.Direct USB et voici un exemple de ce que vous devriez obtenir (Ici un MPTT BlueSolare branché sur le ttyUS0)
$ /opt/PvMonit/bin/vedirect.py /dev/ttyUSB0 PID:0xA04A FW:119 SER#:HQ******** V:25660 I:500 VPV:53270 PPV:14 CS:3 ERR:0 LOAD:ON H19:3348 H20:1 H21:17 H22:33 H23:167 HSDS:52
Pour comprendre chaque valeur, téléchargez la documentation Victron VE Direct Protocol documentation : https://www.victronenergy.fr/support-and-downloads/whitepapers
Interface web en temps réel
Installation des dépendances :
aptitude lighttpd php-cgi lighttpd-enable-mod fastcgi lighttpd-enable-mod fastcgi-php
Configuration du serveur http, avec le fichier /etc/lighttpd/lighttpd.conf :
server.document-root = "/opt/PvMonit/www" server.pid-file = "/var/run/lighttpd.pid" server.username = "www-data" server.groupname = "www-data" server.port = 80 index-file.names = ( "index.html", "index.php") url.access-deny = ( "~", ".inc" ) include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port include_shell "/usr/share/lighttpd/create-mime.assign.pl" include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
On applique la configuration :
service lighttpd restart
On ajoute ensuite la possibilité à l’utilisateur exécutant lighttpd de lancer les script avec sudo sans mot de passe :
Lancer la commande :
visudo
Ajouter la ligne suivante :
+ www-data ALL=(ALL) NOPASSWD: /usr/bin/perl /opt/PvMonit/bin/ampermetre.pl, /opt/temperv14/temperv14 -c, /usr/bin/python /opt/PvMonit/bin/vedirect.py /dev/tty*
C’est terminé, vous pouvez vous connecter sur votre IP local pour joindre votre serveur web :
Export vers emoncms
Connectez-vous à votre interface emoncms hébergée ou créez un compte sur emoncms.org et rendez-vous sur la page « Input api » https://emoncms.org/input/api :
Récupérez la valeur « Accès en écriture » et ajoutez-la dans le fichier de configuration Pvmonit /opt/PvMonit/config.php :
- $EMONCMS_URL_INPUT_JSON_POST='https://emoncms.chezvous.org/input/post.json'; - $EMONCMS_API_KEY='XXXXXXXXXXXXXXXXXXXXXXXX'; + $EMONCMS_URL_INPUT_JSON_POST='https://emoncms.org/input/post.json'; + $EMONCMS_API_KEY='????VOTRE API KEY?????';
Création d’un utilisateur dédié avec pouvoir restreint
adduser --shell /bin/bash pvmonit
Installation des dépendances :
aptitude install lynx
On ajoute ensuite la possibilité à l’utilisateur exécutant l’export de lancer les scripts avec sudo sans mot de passe :
Lancer la commande :
visudo
Ajouter la ligne suivante :
+ pvmonit ALL=(ALL) NOPASSWD: /opt/temperv14/temperv14 -c, /usr/bin/perl /opt/PvMonit/bin/ampermetre.pl, /usr/bin/python /opt/PvMonit/bin/vedirect.py /dev/tty*
Test de collecte :
$ su - pvmonit -c /opt/PvMonit/getForEmoncms.php 2016-11-02T10:55:30+01:00 - C'est un MPTT, modèle "BlueSolar MPPT 100/30 rev2" du nom de MpttBleu 2016-11-02T10:55:30+01:00 - Les données sont formatées comme ceci : V:26180,I:800,VPV:56360,PPV:21,CS:3,ERR:0,H19:3352,H20:5,H21:51,H22:33,H23:167 2016-11-02T10:55:31+01:00 - C'est un MPTT, modèle "BlueSolar MPPT 100/30 rev2" du nom de MpttBlanc 2016-11-02T10:55:31+01:00 - Les données sont formatées comme ceci : V:26200,I:600,VPV:53630,PPV:18,CS:3,ERR:0,H19:1267,H20:4,H21:46,H22:17,H23:201 2016-11-02T10:55:31+01:00 - Après correction, la température est de 11.88°C 2016-11-02T10:55:31+01:00 - Tentative 1 de récupération de consommation 2016-11-02T10:55:32+01:00 - Trouvé à la tentative 1 : la La consommation trouvé est 00.1A 2016-11-02T10:55:32+01:00 - La consommation est de 00.1A soit 23W
Test d’envoi des données :
$ su - pvmonit -c /opt/PvMonit/sendToEmoncms.php 2016-11-02T10:56:44+01:00 - Données correctements envoyées : 1, données en erreurs : 0
Mettre les scripts en tâche planifiée
crontab -e -u pvmonit
Ajouter :
+# Script de récupération des données, toutes les 5 minutes +/5 * * * * /usr/bin/php /opt/PvMonit/getForEmoncms.php >> /tmp/PvMonit.getForEmoncms.log +# Script d'envoi des données, ici toutes les 1/2 heures +3,33 * * * * /usr/bin/php /opt/PvMonit/sendToEmoncms.php >> /tmp/PvMonit.sendToEmoncms.log
Je n’explique pas ici comment configurer emoncms, les flux pour obtenir de beaux dashboard, je vous laisse lire la documentation…
Voici, pour exemple, mon dashboard : http://emoncms.mercereau.info/dashboard/view?id=1
Sonde température (option)
J’utilise la sonde thermomètre USB TEMPer, cette sonde fonctionne avec le logiciel temperv14 qui est plutôt simple à installer
apt-get install libusb-dev libusb-1.0-0-dev unzip cd /opt wget http://dev-random.net/wp-content/uploads/2013/08/temperv14.zip #ou un miroir #wget http://www.generation-linux.fr/public/juin14/temperv14.zip unzip temperv14.zip cd temperv14/ make
Test de la sonde :
$ /opt/temperv14/temperv14 -c 18.50
Ajout de celle-ci dans le fichier /opt/PvMonit/config.php :
- $TEMPERV14_BIN=''; + $TEMPERV14_BIN='/usr/bin/sudo /opt/temperv14/temperv14';
Autres documentations à propos de cette sonde :
- http://www.generation-linux.fr/index.php?post/2014/06/21/Relever-et-grapher-la-temp%C3%A9rature-de-sa-maison-sur-Debian
- http://dev-random.net/temperature-measuring-using-linux-and-raspberry-pi/
Pince ampèremétrique (option)
J’utilise la pince ampèremétrique USB Aviosys 8870 pour mesurer ma consommation électrique.
Le petit script perl (/opt/PvMonit/bin/ampermetre.pl) est très simple pour lire la pince ampèremétrique, qui sera branchée en USB et apparaîtra dans votre système sur le port /dev/ttyACM0
Celui-ci dépend de la librairie serialport :
aptitde install libdevice-serialport-perl
Test : :
$ /opt/PvMonit/bin/ampermetre.pl 00.1A
Ajout de celle-ci dans le fichier /opt/PvMonit/config.php :
- $AMPEREMETRE_BIN = ''; + $AMPEREMETRE_BIN = '/usr/bin/sudo /usr/bin/perl /opt/PvMonit/bin/ampermetre.pl';
Documentation
- Victron VE Direct Protocol documentation : https://www.victronenergy.fr/support-and-downloads/whitepapers
Voilà voilà, bon courage !