PvMonit – Monitoring de mon installation photovoltaïque autonome

Nouvel article avec nouvelle version de PvMonit ici même + gestion du surplus électrique

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é)

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é :

pvmonit-cablage

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://framagit.org/kepon/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 install 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 :

emoncms_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 :

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

Voilà voilà, bon courage !

15 réflexions au sujet de « PvMonit – Monitoring de mon installation photovoltaïque autonome »

  1. Salut,

    Un enorme merci pour cette article (et tous les autres), je vais enfin pouvoir joindre plusieurs projets ensembles (energetique et electronique). Et vive le libre!!!

  2. Bonsoir,

    Un projet sur le long terme, technicien généraliste, je cherchais, je vous ai trouvé…….. je vais encore passer des heures sans dormir.

    Merci pour ce partage.

     

     

     

  3. J’ai pensé utiliser le raspberry pour commander en fonction de la température, depuis les gpio, en python ou en C, le ventilateur avec un petit montage diode-transistor-relais, plutôt qu’avec un minuteur.

  4. Une question quand même concernant ton tuto raspberry et celui-ci : si on le passe en mode read-only, comment va se faire l’écriture des températures et de la consommation de courant ? Est-ce que le pi ne fait que lire ses périphériques en RAM et il n’y a pas écriture ?

    1. PvMonit écrit dans les données (température et autre) dans le /tmp
      Le /tmp est monté en « tmpsfs ». En gros c’est stocké dans la RAM.
      Dans PvMonit il y a deux chose : l’interface « temps réel » et le stockage pour faire des beau graph dans EmonCMS. De mon côté l’interface temps réel est sur le PI et EmonCMS sur un serveur perso distant.
      De temps en temps le PI tente de se connecter à internet et quand le réseau est là (pas toujours allumé) il envoi les données sur EmonCMS

      L’avantage c’est : pas de stockage local des données, pas de lecture/écriture intempestive (qui font que tu change de carte SD tout les 6 mois)
      L’inconvénient : si il y a coupure et que mon PI reboot (très rare) je perd les données qui n’ont pas été exporté vers EmonCMS depuis la dernière connexion.

      Note que tu peux aussi installer EmonCMS sur ton PI et tout stocker en local (mais tu vas user prématurément ta carte SD, ou alors mettre un disque dur externe…
      Ou tu peux choisir de juste utiliser l’interface en temps réel, pas de stockage, pas de problème.

      C’est plus clair pour toi ?

      Belle journée,

  5. This is an amazing project. Just what I have been looking for. I will be happy to help with translation to english. I do not speak or write french (I used google translate to read your blog post) Although I do have couple of friends who speak french and I could get them help out. Unfortunately I also don’t write codes.. all I have is the determination to help out in translating to english (The codes, comments and even the documentation) Please let me know how best I can achieve this.

    1. Thank you for your interest in PvMonit!
      PvMonit was not designed to be translated unfortunately. For it to be translated it would take a few hours (many) to take the code to be ready to be translated.
      At the moment I do not have time for that but if one day I have it I will do it. Note that the project is free and so if you or someone else has the skills for that it can do it: https://github.com/kepon85/PvMonit/

  6. Thanks for the reply.  I have scanned through the code and I think it would take time to do a usable translation to english but it can be done and I intend to start working on it once I get it installed (The tools I need are on the way)

    I couple of questions though:

     

    Would it be possible to have the interface display on a raspberry pi lcd 4.3 480 x 272 screen? I initially ordered that screen to use my Pi with Venus but now that I have seen your project, it offers me even better option than Venus. But alas the screen has already been ordered. I was wondering if it is possible to have the the PVMonit display to be responsive enough for such screen form factor.

    Ok.. I can’t remember what the second question is..

    1. Great

      For LCD display, PVmonit does not know when I write. But it should be possible in a short time … You can start from the script getToLed.php (intended for display on a LED screen 1 line) or the script getToShell.php provided for display in terminal shell …

      David

  7. Bonsoir, un petit retour sur mon installation PV et son monitoring. J’ai fini par abandonner (provisoirement?) le raspberry à cause de problèmes de stabilité de la pince ampèremétrique – peut-être surtout dû à l’alimentation 2A du pi qui ne suit pas ?

    Je suis passé au tout arduino et j’ai réalisé une shield dans le style emontx-emonbase avec comme capteurs 2 pinces ampèremétriques, 1 sonde de température DS18B20 et 1 capteur d’hydrogène MQ8 (on ne sait jamais …) sur un relais ventilateur, 3 entrées ve.direct, un module horloge DS1307 plus une shield Wiznet 5100 ethernet/SD dont je n’arrive pas à utiliser la carte sd en même temps que la puce wiznet mais peut-être qu’avec le stockage en mémoire flash je devrais m’en sortir. Le tout sur une arduino Méga 2560 (chinoise comme la shield ethernet). Les données sont envoyées sur un emoncms distant. J’ai réalisé la shield avec kicad, et la technique du transfert de toner laser. Voilou.

    Mais j’imagine que tu es loin de tout ça avec la paillourte. Bonne continuation.

    Cordialement, FM

  8. Salut David ! Merci pour ton travail, tout cela est très enrichissant !
    Je me trouve bloqué lors de la première étape :
    pi@gtu:~ $ /opt/PvMonit/bin/vedirect.py /dev/ttyUSB0 Traceback (most recent call last):File « /opt/PvMonit/bin/vedirect.py », line 84, in <module>ve.read_data_single()File « /opt/PvMonit/bin/vedirect.py », line 78, in read_data_singlepacket = self.input(byte)File « /opt/PvMonit/bin/vedirect.py », line 34, in inputself.bytes_sum += ord(byte)
    Aurais tu une idée du blocage ?
     
    Merci pour ton temps (et pour ton énergie 😉 )
     
    Gratou

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

En continuant à utiliser le site, vous acceptez l’utilisation des cookies (au chocolat) Plus d’informations

Les cookies sont utilisés à des fin de statistique de visite du blog sur une plateforme indépendante que j'héberge moi même. Les statistiques sot faites avec un logiciel libre. Aucune information n'est redistribué à google ou autre. Je suis seul autorisé à lire ces informations

Fermer