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

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.5-5.6 recomended)
  • 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 :

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)

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 :

Configuration du serveur http, avec le fichier /etc/lighttpd/lighttpd.conf :

On applique la configuration :

On ajoute ensuite la possibilité à l’utilisateur exécutant lighttpd de lancer les script avec sudo sans mot de passe :

Lancer la commande :

Ajouter la ligne suivante :

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 :

Création d’un utilisateur dédié avec pouvoir restreint

Installation des dépendances :

On ajoute ensuite la possibilité à l’utilisateur exécutant l’export de lancer les scripts avec sudo sans mot de passe :

Lancer la commande :

Ajouter la ligne suivante :

Test de collecte :

Test d’envoi des données :

Mettre les scripts en tâche planifiée

Ajouter :

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

Test de la sonde :

Ajout de celle-ci dans le fichier /opt/PvMonit/config.php :

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 :

Test : :

Ajout de celle-ci dans le fichier /opt/PvMonit/config.php :

Documentation

Voilà voilà, bon courage !

ImapSpamScan.pl – Anti-spam IMAP distant / déporté

imapSpamScan.pl - scriptPour des besoins personnels j’ai codé un petit script en Perl (toujours sous licence beerware) afin de pouvoir scanner un répertoire IMAP avec la puissance de SpamAssassin à distance. ça s’avère très pratique :

  • Quand on ne maîtrise pas le serveur de messagerie ;
  • Qu’il n’y a pas d’anti-spam (ou un anti-spam tout pourrit) ;
  • Que votre serveur est trop « petit » (en terme de ressource) pour accueillir un SpamAssassin ;

Des solutions anti-spam déporté existait ici ou et même mais elle ne me satisferaient pas pleinement.. Du coup j’ai pris mes petits doigts et c’est partie…

Commentaire

Petit commentaire sur le code (visible dans ma bébé forge) :

  1. Je n’ai pas trouvé mieux que la base sqlite pour dire « hey toi je t’ai déjà scanner je passe mon chemin » Ma première idée était de créer un flags IMAP personnalisé (genre « SpamChecked ») d’après ce que j’ai lu ça n’est pas permis dans le protocole IMAP standard… c’est moche…
  2. (Une amélioration à penser) Il faudrait pouvoir stocker le mot de passe en crypté.. le hic est qu’il faut que ça soit réversible pour le servir au serveur IMAP (?) là si quelqu’un à des idées je suis preneur…

Utilisation

Installer les lib perl dépendante :

Sous Ubuntu/Debian :

Sinon pour les perl compilé ou autres systèmes :

Télécharger  :

La commande à mettre au lancement de votre poste (dans /etc/xdg/autostart.. ou /etc/rc.local ou .bashrc ou … ou …)

pongSmtp.pl – Tester le bon fonctionnement de votre serveur mail

J’ai mis en place un bébé service pour tester du bon fonctionnement d’un serveur SMTP. En gros vous envoyer un email à ping [arobase] zici [point] fr (en l’occurrence) et vous recevrez en retour un email « pong » avec les entêtes du message reçu par le serveur.

Le mettre en place à la maison

Pré-requis : Perl & un serveur smtp configuré (pour moi c’est Postfix)

Ensuite 4 commandes et c’est réglé :

Note : Si vous mettez en place ce script n’hésitez pas à m’en faire part. Une petite liste de « ping@dom1.com, ping@dom2.com…. » peut être intéressante…

Rien de plus à ajouter… si vous voyez des améliorations n’hésite pas !

Xsshfs v0.5 – Interface graphique pour Xsshfs (Perl/Glade)

Xsshfs est une interface graphique pour SSHFS développé par mes soins. Ce dernier sert à monter sur son système de fichier, un autre système de fichier distant, à travers une connexion SSH. L’avantage est de manipuler les données distantes avec n’importe quel gestionnaire de fichier.

Vite vite, je veux le tester

Pour les Debian/ubuntu

Graphiquement télécharger le deb ici

Sinon en 4 commandes c’est fini :

meuhwa:~$ sudo apt-get install sshfs ssh-askpass libgtk2-gladexml-perl perl libimage-librsvg-perl liblocale-gettext-perl libconfig-tiny-perl
meuhwa:~$ wget http://xsshfs.zici.fr/files/xsshfs_current.deb
meuhwa:~$ sudo dpkg -i xsshfs_current.deb
meuhwa:~$ rm xsshfs_current.deb

Installation à partir du dépôt source

Il faut préalablement avoir installé les dépendances suivantes :  sshfs, ssh-askpass, perl, libgtk2-gladexml-perl, libimage-librsvg-perl, liblocale-gettext-perl, libconfig-tiny-perl

meuhwa:~$ wget -O xsshfs.zip http://forge.zici.fr/p/xsshfs/source/download/master/
meuhwa:~$ unzip xsshfs.zip
meuhwa:~$ cd xsshfs-master
meuhwa:~$ perl xsshfs.pl

Les nouveauté de la version 0.5

  • Paramétrer les valeurs par défauts des champs de connexions
  • Normalisation FreeDesktop
  • Traduit en 3 langues (c’est toujours 3 fois plus que dans la version 0.4)
  • Possibilité de « reprendre » une connexion enregistré

Perl/Glade/Gettext – Multilingue programme

Suite à un email d’une personne intéressée par la traduction de Xsshfs en Espagnol j’ai découvert Gettext n’ayant pas trouvé beaucoup de documentation précise je vais faire un petit HelloWorld en Perl Glade (pour l’interface GTK) et Locale::gettext

Le petit bout de programme que nous allons faire dépend de libgtk2-gladexml-perl & de liblocale-gettext-perl

Création des fichier de traduction

Après création du fichier Glade (que vous pouvez télécharger ici : helloworld.glade) il faut s’assurer que tous les champs que l’on souhaite traduire on la balise « translate » à « yes »

$ grep translatable helloworld.glade
<property name="title" translatable="yes">HelloWorld</property>
<property name="label" translatable="yes">Hello World</property>
<property name="label" translatable="yes">Just one button</property>

Du coup nous allons extraire les données à traduire du fichier glade avec xgettext

$ mkdir po
$ xgettext --sort-output --keyword=translatable -o po/helloworld.pot helloworld.glade

Ouvrez le fichier po/helloworld.pot et compléter avec votre adresse email / nom ect…

Ensuite faites des copies de ce fichier et commencer la traduction (dans notre exemple Anglais -> Français) :

$ cp po/helloworld.pot po/fr.po
$ vi po/fr.po
...
#: helloworld.glade:20
msgid "Hello World"
msgstr "Bonjour tout le monde"

#: helloworld.glade:8
msgid "HelloWorld"
msgstr "Bonjour"

#: helloworld.glade:36
msgid "Just one button"
msgstr "Juste un bouton"

Théoriquement les traductions dans un système linux se trouve dans le chemin /usr/share/locale/fr/LC_MESSAGES mais nous allons les mettre dans un répertoire enfant (./locale) pour notre exemple. Ces traductions sont à « compiler » en .mo

$ mkdir ./locale/fr/LC_MESSAGES
$ msgfmt ./po/fr.po -o ./locale/fr/LC_MESSAGES/helloworld.mo

Intégration dans le perl

Voici le fichier helloworld.pl

#!/usr/bin/perl -w
use helloworld ;
Gtk2->main ;

Et voici le fichier helloworld.pm

package rappels ;

use strict;
use warnings "all";
use Locale::gettext;

use vars qw($gladexml) ;
# $gladexml est donc la variable qui fera référence à l'arbre xml
# de l'application.
# On initialise la valeur de la variable quand l'arbre est créé
# dans le module principale

sub init {
# Démarage de l'interface graphique
$gladexml = $X::gladexml ;
bindtextdomain("helloworld", "./locale");
textdomain("helloworld");
# Sans traduction
print "HelloWorld\n";
# Avec traduction
print gettext("HelloWorld"), "\n";
}
sub on_window1_delete_event{
Gtk2->main_quit ;
}
sub on_bouton_quitter_clicked{
Gtk2->main_quit ;
}

1 ;

package X ;

use strict ;
use Locale::gettext;

bindtextdomain("helloworld", "./locale");
textdomain("helloworld");

require Exporter ;
use vars qw(@EXPORT_OK) ;
@EXPORT_OK = qw ($gladexml) ;
use vars qw($gladexml) ;

use Gtk2 '-init' ;
use Gtk2::GladeXML ;

# On crée l'arbre xml complet. Attention, toutes les fenêtres déclarées
# visibles dans le menu Propriétés->commun->visible, seront affichées
# quand on lancera "Gtk2->main".
$gladexml = Gtk2::GladeXML->new('helloworld.glade' ) ;
# On initialise les variables du module rappels.
rappels::init () ;
# On connecte les fonctions de rappels de l'arbre xml
# à leurs définitions qui sont contenues dans le module rappels.
$gladexml->signal_autoconnect_from_package('rappels' ) ;

1 ;

Tester

Mon poste est en français, je vais donc tester en français puis en forçant l’anglais :

$ echo $LANG
fr_FR.UTF-8
$ perl helloworld.pl
HelloWorld
Bonjour
$ # L'interface doit aussi s'afficher en français
$ LANG=en_US.utf-8
$ perl helloworld.pl
HelloWorld
HelloWorld
$ # L'interface doit aussi s'afficher en anglais

Téléchargement

Vous pouvez télécharger l’intégralité du HellloWorld.pl :

Les liens m’ayant bien aidé :

Xsshfs v0.4 est de sortie…

Xsshfs est un petit programme Perl écrit par mes soins qui permet d’utiliser la commande SSHFS graphiquement. Celui-ci est maintenant disponible en version 0.4.

Au menu des petits plus :

  • Sélection d’une clef SSH possible
  • Le champs « Autres options » c.f. man sshfs
  • Une petite ré-organisation des champs pour épurer l’interface
  • Ajout de paramètres à la commande xsshfs :  –help | –version | –ficheirConfig | –debug

Les liens du projet

Pour l’installation :

$ wget http://xsshfs.zici.fr/files/xsshfs_current.deb ; sudo dpkg -i xsshfs_current.deb ; sudo apt-get install -f ; rm xsshfs_current.deb </code>

Perlbrew – Perl indépenant du système

PerlBrew permet d’installer une version de Perl indépendante de celle du système ce qui permet d(éviter les conflits entre les scripts maison et les paquets système.

Avec Perlbrew il est possible d’installer Perl dans le HOME d’un utilisateur ou dans un répertoire type /opt/perl5 (ce que nous avons choisie ici)

Note : cpan fonctionne normalement avec Perlbrew

Installation

Environnement

Par défaut Perlbrew s’installe dans $HOME/perl5, nous souhaitons l’installer dans /opt/perl5, il faut donc lui préciser un autre lieu :

 $ export PERLBREW_ROOT=/opt/perl5</pre>
$ cd /opt/perl5
$ curl -k -LO http://xrl.us/perlbrew
$ perl ./perlbrew install
$ rm ./perlbrew
$ /opt/perl5/bin/perlbrew init

Les commandes suivante vont modifier le PATH afin

 $ echo "export PERLBREW_ROOT=/opt/perl5" >> ~/.bashrc
$ echo "source /opt/perl5/etc/bashrc" | tee -a ~/.bashrc

Déconnectez-vous ou relancer la bash. Vous devriez avoir de nouvelles variables d’environnement :

 $ env | grep PATH
PATH=/opt/perl5/bin:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/bin:/opt/scala/cur/bin:/usr/local/mysql/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/opt/scala/cur/bin
PERLBREW_PATH=/opt/perl5/bin

Installation de perl

 $ perlbrew mirror
# Choisir par exemple : 78 : OVH
$ perlbrew -v install perl-5.14.2 -Dusethreads

Switch perl

Actuellement sur le système perl v5.8.8

 $ perl -v

This is perl, v5.8.8 built for x86_64-linux-thread-multi

Copyright 1987-2006, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
 GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
 this system using "man perl" or "perldoc perl".  If you have access to the
 Internet, point your browser at http://www.perl.org/, the Perl Home Page.

On switch sur l’install de perl 5.14.2

$ perlbrew switch perl-5.14.2
$ perl -v

This is perl 5, version 14, subversion 2 (v5.14.2) built for x86_64-linux

Copyright 1987-2011, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
 GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
 this system using "man perl" or "perldoc perl".  If you have access to the
 Internet, point your browser at http://www.perl.org/, the Perl Home Page.

Retour sur la version système :

 $ perlbrew off
perlbrew is turned off.
$ perl -v

This is perl, v5.8.8 built for x86_64-linux-thread-multi

Copyright 1987-2006, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
 GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
 this system using "man perl" or "perldoc perl".  If you have access to the
 Internet, point your browser at http://www.perl.org/, the Perl Home Page.

Perl & le CPAN

Installation de CPAN

 $ perlbrew switch perl-5.14.2
$ cpan
# Answer all setup instructions
» o conf commit
» q

Utilisation CPAN

 $ cpanm --interactive -v App::cpanoutdated

Source

  • http://www.perlbrew.pl/
  • http://blog.fox.geek.nz/2010/09/installing-multiple-perls-with.html
  • http://nxadm.wordpress.com/2010/12/10/get-the-latest-perl-release-with-perlbrew/
  • http://www.perl.org/get.html
  • http://search.cpan.org/~gugod/App-perlbrew-0.39/bin/perlbrew#INSTALLATION