PvMonit est arrivé à une version « mature », une version 1.0. PvMonit est un logiciel sous licence Beerware qui vous permet de monitorer votre installation électrique solaire autonome, plus particulièrement avec les appareils Victron.
A venir, une « sur-couche » à PvMonit pour faire de la domotique et déclencher des actions à la demande. Exemple : les batteries sont pleines, on allume une pompe à eau puis la résistance électrique d’un chauffe eau. Ou encore, les batteries sont sous un seuil critique, on coupe tout sauf l’éclairage…. toutes les applications sont possibles !
PvMonit C’est quoi ?
PvMonit, c’est donc un petit logiciel de monitoring photovoltaïque pour matériel Victron compatible Ve.direct (le minimum pour que cela fonctionne est d’avoir un BMV 600, 700 ou 702…), particulièrement adapté pour les installations autonomes (hors réseau). Il permet une vue « en direct » par interface web et un enregistrement de l’historique (avec emoncms, branche d’OpenEnergyMonitor).
PvMonit vue standard
PvMonit avec détails
Emoncms Tableau de bord
Mon usage
Je collecte les information de mon système photovoltaïque (température, état des batteries, production solaire, etc…) par une carte électronique (Arduino) qui se trouve dans un local à 35m de mon habitation. Je transporte ces données par un 3 fils dans un câble réseau. Celui-ci est connecté à un mini ordinateur (raspberry pi 0) sur lequel j’ai un écran LCD qui m’affiche l’état du système et j’ai un interface web (démo) ou j’ai plus de détails. Il y a aussi un historique qui est enregistré via emoncms (démo).
Au niveau Matériel
2 versions possibles :
Une version Raspberry PI 3B, si vous avez un point wifi actif (même occasionnellement) et que votre matériel solaire est à porté de wifi. C’est une solution plutôt simple (si on touche un peu sous linux).
Une version Raspberry Pi 0 + Arduino : plus complexe à mettre en œuvre (il faut savoir souder et avoir plus de connaissances), mais beaucoup plus souple et moins chère. Particulièrement adapté si votre installation réseau est loin (max 60m) de votre maison ;
L’usage des câbles ve.direct USB officiel permet de simplifier le montage.
Le hub USB avec les câbles Ve.direct sous la multi
Le raspberry tout à gauche
La pince ampèremétrique USB pour la consommation de l’habitat
Schéma de câblage
Arduino + Raspbery Pi 0
L’usage d’un arduino pour collecter les données donne de la souplesse pour pouvoir ajouter des sondes à volonté et permet de parcourir de grande distance jusqu’au Raspberry PI qui récupère les informations. Un schéma de câblage détaillé :
Le schéma de câblage détaillé
Voilà ce que ça donne, c’est plus de boulot, plus de soudure mais plus DIY, plus fun :-p
Le schéma de câblage détaillé
Les connecteurs MOLEX en cours de connexion
Le Shield de l’arduino mega en cours de soudure
Test de récupération des données avec Arduino et câble ve.direct DIY
Le câble ve.direct DIY
Sonde de courant
Le tout connecté et fonctionnel
L’écran LCD dans la maison (le Pi est derrière)
Installation
Il ne faut pas se mentir, ça demande de bonnes connaissances techniques en linux/réseau voir arduino/soudure (si vous choisissiez cette option).
Je partage ici mon script de firewall iptable. C’est un script « à l’ancienne », dans du bash… ça fait le taf, mais rien de bien transsudant. En gros :
On ferme tout les ports sauf ceux qui nous intéresse (80, 25, icmp…)
Petite fonction pour ouvrir les ports mis en écoute sur Portsentry. Portsentry c’est un petit logiciel de sécurité en mode « pot de miel ». On met des ports en écoute mais il n’y a rien derrière. Dès que quelqu’un tente de s’y connecter (un robot ou quelqu’un de malveillant), ça bloque son IP dans le firewall pour un temps donnée. C’est radical si vous déplacez le port SSH du 22 vers autre chose et que vous mettez Portsentry à écouter (entre autre) sur le 22…
Mode maintenance du serveur web (lancé via ./iptables.sh maintenance). Il permet de mettre une page de maintenance pour tout le monde sauf pour vous (j’explique en détail dans cet article)
iptables.sh
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/bin/bash
## IP :
# Chez moi
MOI="A.A.A.A"
# Mon serveur
SRV1="X.X.X.X"
IPT="/sbin/iptables"
PORTSENTRYCONF="/etc/portsentry/portsentry.conf"
export IPT PORTSENTRYCONF
functionportsentryOpen(){
.${PORTSENTRYCONF}
IFS=','read-ra TCP_PORTS_SPLIT<<<"${TCP_PORTS}"
forTCP_PORT in"${TCP_PORTS_SPLIT[@]}";do
${IPT}-AINPUT-ptcp--dport${TCP_PORT}-jACCEPT
done
IFS=','read-ra UDP_PORTS_SPLIT<<<"${UDP_PORTS}"
forUDP_PORT in"${UDP_PORTS_SPLIT[@]}";do
${IPT}-AINPUT-pudp--dport${UDP_PORT}-jACCEPT
done
}
# Remise a 0
${IPT}-F
${IPT}-tnat-F
# Les connexions entrantes sont bloquées par défaut
${IPT}-PINPUTDROP
# Les connexions destinées à être routées sont acceptées par défaut
${IPT}-PFORWARDACCEPT
# Les connexions sortantes sont acceptées par défaut
${IPT}-POUTPUT ACCEPT
######################
# Règles de filtrage #
######################
# Nous précisons ici des règles spécifiques pour les paquets vérifiant
# certaines conditions.
# Pas de filtrage sur l'interface de "loopback"
${IPT}-AINPUT-ilo-jACCEPT
# Accepter le protocole ICMP (notamment le ping)
${IPT}-AINPUT-picmp-jACCEPT
# Accepter les packets entrants relatifs à des connexions déjà
# établies : cela va plus vite que de devoir réexaminer toutes
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é)
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 hub USB avec les câbles Ve.direct sous la multi
Le raspberry tout à gauche
La pince ampèremétrique USB pour la consommation de l’habitat
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 :
Shell
1
2
3
4
aptitude install php-cli git python-serial sudo
cd/opt
git clonehttps://github.com/kepon85/PvMonit.git
cpconfig-default.phpconfig.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)
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 :
1
aptitde install libdevice-serialport-perl
Test : :
1
2
$/opt/PvMonit/bin/ampermetre.pl
00.1A
Ajout de celle-ci dans le fichier /opt/PvMonit/config.php :
Le Raspberry Pi, est un mini ordinateur qui consomme très peu d’énergie. Il n’y a pas de disque dur mécanique, le système se trouve sur une carte SD. L’avantage c’est que ça consomme moins d’énergie mais la carte SD à l’inconvénient de s’abîmer très rapidement quand il y a beaucoup de lecture/écriture (et sa durée de vie n’en ai que moindre). J’ai donc passé mon Raspberry Pi sous Raspbian (une Debian pré-packagé pour Raspberry) et mis en place un système en lecture seul. Il s’agit ici d’une installation type serveur sans interface graphique.
Installation de Raspbian (sans écran sur le Raspberry) avec connexion Wifi
Vue que je n’ai pas d’écran pour installer mon Raspberry, j’ai mis la carte SD dans mon ordinateur portable pour l’installation. Après le téléchargement de « Raspbien lite » sur le site officiel : http://www.raspbian.org. Il suffit d’utiliser la commande dd pour installer l’image :
Sauf si vous utilisez le DHCP, dans ce cas il faudra ajouter des choses pour que ça fonctionne en RO (« ln -s /tmp /var/lib/dhcp » par exemple…) sinon on supprime aussi le client DHCP :
On désactive le bash_history soit en supprimant complètement le fichier
Shell
1
2
3
4
5
history-c
rm~/.bash_history-rf
export HISTFILESIZE=0
unset HISTFILE
echo"HISTFILESIZE=0">>~/.bashrc
Soit en le déplaçant dans /tmp. Il sera remis à 0 à chaque reboot mais fonctionnera en read only.
/etc/bash.bashrc
diff
1
+ HISTFILE="/tmp/${USER}_bash_history"
Avant de mettre le système en read only on va faire deux alias pour switcher du mode read-only on mode read-write facilement. Ajouter dans bashrc commun : /etc/bash.bashrc :
/etc/bash.bashrc
1
2
3
4
5
6
7
# Fonction pour connaître le mode en cours
fs_mode=$(mount|sed-n-e"s/^.* on \/ .*(\(r[w|o]\).*/\1/p")
# alias ro/rw pour passer de l'un à l'autre
alias ro='mount -o remount,ro / ; fs_mode=$(mount | sed -n -e "s/^.* on \/ .*(\(r[w|o]\).*/\1/p")'
alias rw='mount -o remount,rw / ; fs_mode=$(mount | sed -n -e "s/^.* on \/ .*(\(r[w|o]\).*/\1/p")'
# Modification du prompt pour afficher le mode en cours
Des dires de Wikipedia : « Sieve est un langage de filtrage du courrier électronique. Il est normalisé dans le RFC 5228. Sieve permet de filtrer sur les en-têtes d’un message qui suit le format du RFC 5322, c’est-à-dire un message Internet typique. »
Sieve c’est très pratique car le filtrage du courrier est effectué au niveau du serveur dès la réception de l’email. Ce qui est presque indispensable quand on utilise plusieurs clients de messagerie (web &/ou desktop). Je vais donc utiliser Managesieve (qui est la partie serveur du protocole) pour Dovecot (projet Pigeonhole).
Actuellement le panel ISPconfig me permet d’éditer les filtres Sieve mais n’utilise pas Managesieve. ISPconfig stock en base (table mail_user_filter) et écrase le fichier à chaque modification.
Je ne souhaite plus passer par ISPconfig pour modifier mes filtres, mais directement par Horde (via Ingo) ou Roundcube (plugin) ou encore par thunderbird (plugin) selon mes besoins.
Installation de Managesieve
Rien de plus simple :
Shell
1
aptitude install dovecot-managesieved
Modifier le fichier /etc/dovecot/dovecot.conf :
/etc/dovecot/dovecot.conf
diff
1
2
< protocols = imap
> protocols = imap sieve
Puis redémarrer le service, le port 4190 doit ensuite être à l’écoute :
Shell
1
2
3
$service dovecot restart
$netstat-pnat|grep4190
tcp000.0.0.0:41900.0.0.0:*LISTEN11111/dovecot
Horde (ingo) & Sieve
Il vous suffit de modifier le fichier ingo/config/backends.php de votre instance horde de la façon suivante :
ingo/config/backends.php
diff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[...]
/*IMAPExample*/
$backends['imap']=array(
// ENABLED by default
< 'disabled' => false,
> 'disabled' => true,
'transport' => array(
Ingo::RULE_ALL => array(
'driver' => 'null',
'params' => array(),
),
),
[...]
$backends['sieve']=array(
// Disabled by default
< 'disabled' => true,
> 'disabled' => false,
'transport' => array(
Ingo::RULE_ALL => array(
'driver' => 'timsieved',
'params' => array(
// Hostname of the timsieved server
'hostspec' => 'localhost',
// Login type of the server
'logintype' => 'PLAIN',
// Enable/disable TLS encryption
'usetls' => false,
// Port number of the timsieved server
'port' => 4190,
// Name of the sieve script
< 'scriptname' => 'ingo',
> 'scriptname' => 'filtres',
// Enable debugging. The sieve protocol communication is logged
[...]
Ne faites (peut être) pas ça chez vous
En effet ça ne s’avère pas être forcément la meilleure des solutions :
Il n’est apparemment pas possible d’importer des scripts existants.
Plus embêtant il s’avère que Horde fonctionne presque de la même façon qu’ISPconfig. A savoir qu’il stock en base les filtres et écrase le script sieve (via managesieve quand même) Ce qui me condamne à n’utilise qu’une interface (horde) pour modifier mes filtres :’-(
Bon je m’en contente, il est toujours plus agréable de modifier ses filtres via son webmail (horde) que via le panel ISPconfig.
EDIT 24/02/2015 : ‘Il n’est plus nécessaire d’utiliser cloudfiles comme backend pour duplicity. À la place, il faut utiliser un backend spécial hubic intégré à duplicity récemment »voir le commentaire de blankoworld
EDIT 02/2015 : suppression du « DeprecationWarning » dans le log.
Mon ADSL est depuis peut chez OVH. De ce fait je bénéficie d’un compte hubiC avec un espace de stockage d’1To. Quelle aubaine pour des sauvegardes ! Mais bon donner mes mails, mes sites, mes documents administratifs à un tiers… bof bof. Il faudrait un minimum de chiffrage !
python-cloudfiles-hubic est nécessaire car duplicity n’intègre pas nativement le service cloud « HubiC » pour une sombre histoire de protocole d’authentification non standard de la part d’OVH (détail par l’auteur)
Rendez-vous ensuite dans votre interface hubiC. Et là normalement il y a plein de fichier duplicity-BLABLA-blabla.bla ! On supprime tout ! (c’était juste pour les tests)
Il ne semble pas possible d’écrire dans un sous répertoire. Mais, comme je l’ai signalé dans mon commentaire, il semble possible d’écrire dans un autre « container » sur hubiC (autre que default). Il ne sera visible qu’après modification de l’URL. Exemple si vous avez écrit dans le conteneur backup rendez vous sur l’URL : https://hubic.com/home/browser/#backup
Le script
Voici mon script :
backup-to-hubic.sh
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/bin/bash
###################################
## Backup sur HubiC avec duplicity
# Script sous licence BEERWARE
# Version 0.4.1 02/2015
###################################
set-eu
##### Paramètres
# Utilisateur Hubic
HUBICUSER="leuserdevotrehubic"
# Mot de passe HubiC
HUBICPASSWORD="lemotdepassedevotrehubic"
# Application client id Hubic
HUBICAPPID="api_hubic_XXXXX"
# Application client secret Hubic
HUBICAPPSECRET="YYYYYY"
# Application domaine de redirection Hubic
HUBICAPPURLREDIRECT="http://localhost/"
# Liste à sauvegarder (voir le man duplicity avec le filelist)
A noter que mes bases de données sont dumpées à plat de façon indépendante du script de backup distant (par mysql_dump.sh)
Exemple de fichier filelist :
/root/backup-mercereau.info.filelist
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/etc
/var/backups/mysql
/var/chroot/bind9/etc/bind
/var/lib/mysql
/var/lib/awstats
/var/lib/mailman
/var/spool/cron
/var/vmail
-/var/www/mercereau.info/wp-content/cache/
-/var/www/default
/var/www
/home
-/root/.cpan
-/root/.cache
-/root/.npm
/root
/opt
Attention : les fichiers et répertoires à exclure doivent apparaître avant l’inclusion d’un répertoire parent. En effet, duplicity s’arrête à la première règle qui matche un chemin donné pour déterminer s’il doit l’inclure ou l’exclure. (sources)
En continuant à utiliser le site, vous acceptez l’utilisation des cookies. 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