C’est un peu la succession, l’amélioration de mon service de sauvegarde à froid, ça va maintenant plus loin, c’est plus « user freindly ». Je le propose avec mon activité pro « retzo.net » :
Le stockage à froid qui s’allume uniquement si vous en avez besoin.
Le constat est simple : la majeure partie des données numériques en ligne n’a aucunement besoin d’être accessible à tout instant et pourtant elle occupe une place conséquente sur des serveurs (coût énergétique, environnemental…)
Les données numériques que nous stockons ont un coût énergétique souvent sous-estimé. Les datacenters, où sont hébergés bon nombre de sauvegardes et de services en ligne, représentent environ 1 % de la consommation électrique mondiale (source). Pour des associations ou entreprises éco-responsables engagées dans une démarche de sobriété numérique, il est donc crucial de repenser la façon dont on stocke et sauvegarde les données. Le stockage à froid s’impose comme une solution incontournable pour réduire drastiquement l’empreinte énergétique de vos sauvegardes tout en gardant vos données en sécurité.
🌍 Les serveurs matériels utilisés sont très basses consommations (architecture ARM, disque SSD)
♻️ Les serveurs (hors disque dur) sont issus du ré-emploi
☀️ L’énergie utilisée prioritairement est le solaire
Et exclusivement si vous le souhaitez
🔒 Vos données sont en sécurité, le service étant hors ligne la majorité du temps, la surface d’attaque est bien moindre
Chiffrement de la communication (inclus)
Chiffrement du disque possible
Serveur dédié possible
⏳ L’accès à vos données, l’allumage du serveur est possible via une interface web et/ou des protocoles standard (SFTP, RSYNC (over ssh), WebDAV, BORG) authentification par mot de passe ou par clé
Le stockage à froid consiste à conserver des données (sauvegardes, archives, etc.) sur un support qui n’est alimenté et allumé qu’en cas de besoin. Contrairement à un serveur classique qui tourne en continu 24h/24, un système à froid reste hors tension la majeure partie du temps. Concrètement selon le cas :
Service de sauvegarde : le serveur est démarré uniquement lors des opérations de sauvegarde ou de restauration, puis éteint dès qu’il a fini son travail. On évite ainsi de faire tourner des disques et des serveurs inutilement le reste du temps.
Vous disposez d’une interface pour allumer manuellement celui-ci pour restaurer des données au besoin
Service d’archivage : le serveur est éteint systématiquement et vous l’allumez sur demande via une interface web pour accéder à vos données, en ajouter, en supprimer…
En résumé, le stockage à froid c’est :
Allumé uniquement à la demande : le système de sauvegarde fonctionne seulement au moment nécessaire (sauvegarde programmée, restauration exceptionnelle), le reste du temps il consomme 0 watt.
Matériel sobre en énergie, issu du ré-emploi : il s’appuie sur un mini-ordinateur à très faible consommation (Raspberry Pi) couplé à des disques SSD. Ce type de dispositif consomme environ 3 watts en activité, soit l’équivalent d’une très petite ampoule LED.
Stockage déporté : généralement, le support de sauvegarde se trouve hors du site principal, ce qui protège vos données en cas d’incident (incendie, vol, panne majeure) sur votre infrastructure principale.
Auto-hébergement en France: la solution est hébergée hors datacenter ce qui diminue le coût environnemental infrastructure, climatisation (obligatoire en cas de concentration de serveur) ici les places seront limitées pour éviter d’avoir à recourir à de la climatisation.
Adopter le stockage à froid pour vos sauvegardes permet de réduire la consommation électrique d’un facteur de plus de 100. En effet, la solution de stockage à froid n’utilise qu’environ 3 W lorsqu’elle est allumée (source) – à peine l’énergie d’une seule petite ampoule – là où un serveur de sauvegarde classique consomme souvent 30 W ou plus en continu (source). Sur une journée, cela équivaut à seulement quelques wattheures (Wh) consommés, contre plusieurs centaines de Wh pour une machine fonctionnant 24h/24. On obtient ainsi jusqu’à 100 fois moins d’énergie utilisée (par exemple ~3 Wh/jour contre ~300 Wh/jour dans une configuration classique).
Une infrastructure éco-conçue et sans climatisation
Une autre force du stockage à froid écologique réside dans l’infrastructure matérielle et architecturale qui l’accompagne. Ici, tout est pensé pour minimiser l’impact environnemental :
Matériel basse consommation, issu du ré-emploi : Le cœur du système est un mini-ordinateur de type Raspberry Pi, un appareil de la taille d’une carte de crédit qui consomme seulement quelques watts mais suffit amplement pour gérer des sauvegardes, archiver des données. Ce petit ordinateur, couplé à un disque dur 2,5” économe en énergie, constitue un serveur silencieux et frugal.
Alimentation solaire et autonomie énergétique : Le dispositif peut être alimenté par une installation solaire, cette énergie est utilisée en priorité. Vous pouvez choisir le mode de fonctionnement selon vos critères (énergie solaire prioritaire, exclusivement du solaire…)
Local bioclimatique : Le matériel de sauvegarde est hébergé dans un bâtiment éco-construit en adobe (des briques de terre crue façonnées à partir de terre locale). Ce local a été conçu en auto-construction selon les principes bioclimatiques : il est orienté plein nord pour éviter l’exposition directe au soleil, ce qui le maintient naturellement frais. Les murs en terre crue offrent une excellente inertie thermique, gardant l’intérieur à une température stable. De plus, une ventilation naturelle a été mise en place grâce à des « chapeaux de cheminée » (éoliennes statiques sur le toit) qui créent un tirage d’air frais constant. Résultat : même en été, la température à l’intérieur reste modérée, nul besoin de climatisation artificielle.
Accéder à une interface de démonstration simple
Le mode SFTP distant n’est pas permis ici pour la démonstration, vous avez seulement un accès HTTP et de façon limitée en quota disque.
WakeOnStorage permet d’accéder à distance à des ressources de stockage ou à des petits serveurs domestiques, tout en les maintenant éteints la plupart du temps pour économiser l’énergie, réduire la surface d’attaque
Le principe repose sur deux composants complémentaires :
Interface en ligne (wakeonstorage.retzo.net) — accessible depuis Internet — qui permet à l’utilisateur de visualiser l’état de ses ressources, de les allumer temporairement, et d’y accéder une fois disponibles.
API locale (wakeonstorage-local) — installée sur le réseau local — qui communique avec le matériel (disques USB contrôlé par PPPS, Raspberry Pi allumé par relais…) pour exécuter les ordres.
By mermaid
Lorsqu’un utilisateur demande une ressource, l’interface interroge l’API locale. Si la ressource est déjà allumée, elle devient directement accessible. Si elle est éteinte, l’interface propose de l’allumer pour une durée déterminée (par exemple 2 heures).
L’API locale envoie alors les commandes nécessaires : activation d’un relai pour démarrer un Raspberry Pi, ou alimentation d’un disque dur via un hub USB pilotable (PPPS) Une fois la ressource allumée, l’accès est temporairement autorisé.
Ce fonctionnement en deux niveaux garantit la sécurité, la sobriété énergétique et l’autonomie : aucune ressource n’est inutilement allumée, et tout reste sous le contrôle de l’utilisateur.
Je suis passé de fail2ban (que j’utilise depuis lonnngtemps) à Crowdsec pour les raisons suivantes :
fail2ban est (très) gourmand en ressource serveur (trop)
Crowdsec dispose d’un volet « scénario » que je trouve bien malin et qui le rend « plus intelligent » et permet de mutualiser les IP frauduleuse.
Au final je bloque certainement plus d’attaques pour bien moins de CPU (surtout) consommés.
C’est plutôt flagrant sur le côté « économie de ressources CPU » sur les graph :
Comparatif stats (munin) avant avec fail2ban et après avec crowdsec
Mise en œuvre
Mon contexte : des serveurs avec le panel ISPconfig (ce dernier écoute sur le port 8080 – important pour la suite) sur Debian 11.
Je ne vais pas détailler ici ce qu’il y a dans la documentation Crowdsec, d’autant que ça peut changer. Pour mon OS (Debian) actuellement c’est :
# Installation du dépôt
curl -s https://install.crowdsec.net | sudo sh
# Installation de crowdsec
apt install crowdsec
Du coup, comme ISPconfig écoute déjà sur le port 8080 et que Crowdsec utilise ce port pour son API il faut modifier celui-ci (moi je passe à 8079) :
sed -i -e "s/8080/8079/g" /etc/crowdsec/config.yaml
sed -i -e "s/8080/8079/g" /etc/crowdsec/local_api_credentials.yaml
systemctl restart crowdsec
ISPconfig n’utilise pas logrotate pour la rotation de log apache, il a son propre processus intégré. Pour que Crowdsec puisse lire tout les logs HTTP (ici apache) il va falloir lui donner le chemin. MAIS. ISPconfig nomme les logs par date et créer un lien symbolique vers « access.log » :
# ls /var/log/ispconfig/httpd/david.mercereau.info/ -la
total 173480
drwxr-xr-x 2 root root 4096 30 juin 12:19 .
drwxr-xr-x 176 root root 12288 21 juin 16:05 ..
[...]
-rw-r--r-- 1 root root 4712747 29 juin 23:59 20240629-access.log
-rw-r--r-- 1 root root 2836678 30 juin 14:08 20240630-access.log
lrwxrwxrwx 1 root root 19 30 juin 12:19 access.log -> 20240630-access.log
lrwxrwxrwx 1 root root 55 30 juin 00:12 yesterday-access.log -> /var/www/clients/client3/web196/log/20240629-access.log
Mais pour que le « nouveau » log soit pris en considération je fais un restart du service crowdsec à 0:20 (la rotation ayant lieu à ~0:10) chez moi au vu des date de création des fichiers de logs :
20 0 * * * systemctl restart crowdsec
C’est un peu du bricolage mais c’est le meilleurs compromis que j’ai jusque là.
EDIT : j’ai changé mon fusil d’épaule pour (aussi) ménager le nombre de fichier suivi par crowdsec (j’ai un serveur avec 200 vhost). En effet je me suis rendu compte que /var/log/apache2/other_vhosts_access.log était surveillé via /etc/crowdsec/acquis.yaml donc il y avait double surveillance des access. J’ai donc juste ajouté les « error.log » dans mon /etc/crowdsec/acquis.d/ispconfig.yaml
A ce stade il n’y a aucun ‘effet’ (pas de blocage). De mon côté j’utilise le firewall iptables donc j’ai utiliser le bouncer qui va bien pour lui :
apt install crowdsec-firewall-bouncer-iptables
De la même façon on change le port pour joindre l’API
sed -i -e "s/8080/8079/g" /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
systemctl restart crowdsec-firewall-bouncer
Des commandes utiles :
cscli decision list
cscli alert list
# Pour voir toutes les IP blacklisté (intégrant les IP renvoyé par l'API centrale crowdsec
ipset list crowdsec-blacklists
# Supprimer une IP bloqué
cscli decisions delete -i x.x.x.x
Du fait de la « mutualisation » des blacklistes il y a de la data qui est envoyé chez un tiers… bon même si la société est Française le site est hébergé à San Francisco (mention légal) Typiquement le modèle économique est de récupérer de la data (les IP malveillantes) sur les « crowdsec community » pour détecter des intrusions et vendre des bases d’IP à bloquer aux autres… (note : ce partage vers l’API centrale est désactivable : FAQ / Troubleshooting | CrowdSec)
Le dashboard local est déprécié Cscli dashboard deprecation | CrowdSec au profil de l’APP en ligne crowdsec non open source pour le coup… (pour le coup c’est pas indispensable à l’usage de Crowdsec)
J’ai l’impression que le modèle économique se dessine et que ça se ferme un peu…
Toute proportion gardé bien sûr, on parle d’IP malveillante et non de data utilisateur… Je voudrais pas faire mon « libo-terroriste » hein
Plugin Munin
Moi j’aime bien monitorer ce qui ce passe et comme le dashboard local Crowdsec n’est plus maintenu, a minima j’ai fais un plugin pour avoir des graph’ dans Munin :
Pour l’association le Retzien.fr (dont je fais parti) j’ai effectué une migration de Plesk 18 vers ISPconfig 3. Plesk avait été mis en œuvre avant mon arrivé car l’administrateur en place connaissait le produit. Mais c’est un produit payant, de plus en plus cher, et pour une association qui a du mal à avoir un équilibre financier c’était difficile à assumer. Plesk est très « beau » et user friendly mais en tant qu’administrateur système je le trouve plutôt opaque (on ne sais pas exactement ce qu’il fait, pas trop de respect des « us et coutumes » de Linux (position des fichiers de config…), ET CE N’EST PAS LIBRE !!!
ISPconfig est libre et propose un script de migration (ISPConfig Migration Toolkit) mais ne supporte pas les dernières versions de Plesk, car le chiffrement des mots de passe n’est plus compatible. Du coup j’ai dû bricoler… Ce bricolage est l’objet de cet article.
Note : ici il n’est question que de la partie mail/DNS et compte client, car c’est la seule fonctionnalité du serveur, les fonctions web n’ont pas été testées.
Installation ISPconfig + Migration Toolkit
Je ne détaille pas ici la procédure d’installation d’ISPconfig 3 et l’usage du « Migration Toolkit » qui sont déjà bien documentés, dans mon cas :
Suite à l’usage du « Migration toolkit », même si le Plesk source n’est pas supporté, je n’ai pas d’erreur mais j’ai plusieurs problèmes que je vais essayer de régler par différents scripts.
Préambules : Les scripts suivants utilisent l’API d’ISPconfig (il faut donc créer un utilisateur distant, dans Système/utilisateur distant). ils doivent donc les lancer depuis le serveur source (Plesk).
Authentification IMAP
Le problème
Il est impossible de se connecter au serveur avec les comptes IMAP. Le log dit :
Error: sql(xxxxxxx@retzien.fr,::1,<MdFia/2k3toAAAAAAAAAAAAAAAAAAAAB>): Invalid password in passdb: crypt() failed: Invalid argument
Effectivement le chiffrement en base est différent :
Mais on va s’en sortir en rusant, en effet Plesk ne crypte/ »hash » pas les mots de passe mais les chiffre :
Crypter / « hasher » : c’est convertir définitivement un chaîne (ici un mot de passe) en un code. Pour savoir si le mot de passe proposé pour l’authentification est bon il faut crypter / « hasher » le mot de passe et le comparer.
Chiffrer : c’est convertir une chaîne (le mot de passe ici) avec une clé, cette fonction est réversible, et qui détient la clé peut donc déchiffrer la chaîne (le mot de passe)
Les mots de passe dans Plesk sont donc « lisibles » pour qui possède la clé de déchiffrement (l’administrateur par exemple ou un hacker qui obtiendrait l’accès au serveur…)
Pour vous en persuader, lancez la commande ci après et vous obtiendrez un beau tableau 1er colonne « émail », 2ème « mot de passe en clair »
/usr/local/psa/admin/sbin/mail_auth_view
Mais pourquoi les mots de passes ne sont ils pas cryptés ?
Plesk propose le support de l’authentification « mot de passe chiffré ». Et cette fonctionnalité est de fait contrainte à avoir le mot de passe en clair sur le serveur car il faut pouvoir le déchiffrer.
Exemple de méthode d’authentification sous Thunderbird
ISPconfig ne supporte pas cette fonctionnalité, car qu’il considère que ce serait un trop gros trou dans la sécurité du serveur, et qu’avec le chiffrement de la connexion SSL/TLS ou START/TLS ce n’est pas nécessaire d’en remettre une couche.
Effet de bord important : si vos utilisateurs ont configurés leur client de messagerie en « mot de passe chiffré » il faudra leur faire modifier ce paramétrage (IMAP & SMTP)
De ce que je comprends, cette méthode d’authentification chiffrée avait sa place quand les serveur IMAP/SMTP ne proposait pas de chiffrement de connexion SSL/TLS ou START/TLS.
La solution consiste, sur le serveur Plesk à lancer le script ci-après qui :
Lance la commande Plesk « magique » pour voir les mots de passe déchiffrés
« Parse » le résultat… Se connecte à ISPconfig et change le mot de chaque boîte émail
<?php
/*
* licence Beerware
* By David Mercereau : http://david.mercereau.info
*/
// Plan B : https://www.besuchet.net/2016/06/plesk-11-encrypted-hashed-password-authentication-php-on-psa-database/
// ISPconfig Remote Config
$CONFIG['remoteUser'] = 'retzien';
$CONFIG['remotePassword'] = 'XXXXXXXXXX';
$CONFIG['remoteSoapLocation'] = 'https://192.168.1.64:8080/remote/index.php';
$CONFIG['remoteSoapUri'] = 'https://192.168.1.64:8080/remote/';
$CONFIG['logfile'] = '/tmp/migration-email-password.log';
function toLog($txt, $level) {
file_put_contents($GLOBALS['CONFIG']['logfile'],date("[j/m/y H:i:s]")." - ".$level." - $txt \r\n",FILE_APPEND);
echo "[$level] $txt\n";
}
// Connexion to ISPconfig
$client = new SoapClient(null, array('location' => $CONFIG['remoteSoapLocation'],
'uri' => $CONFIG['remoteSoapUri'],
'stream_context'=> stream_context_create(array('ssl'=> array('verify_peer'=>false,'verify_peer_name'=>false))),
'trace' => 1));
// Login
if($session_id = $client->login($CONFIG['remoteUser'], $CONFIG['remotePassword'])) {
toLog('Login Ok. Session ID:'.$session_id, 'info');
}
# Launch plesk command for auth view in plain text
exec('/usr/local/psa/admin/sbin/mail_auth_view', $out, $return);
if ($return == 0 || $out[0] == null){
foreach ($out as $line) {
$lineExplode = explode('|', $line);
if (isset($lineExplode[1]) && isset($lineExplode[3])) {
$email = str_replace(' ', '', $lineExplode[1]);
$password = str_replace(' ', '', $lineExplode[3]);
# Verification data
if (filter_var($email, FILTER_VALIDATE_EMAIL) && $password != '') {
# mail_user_get
try {
$mail_user_get = $client->mail_user_get($session_id, array('email' => $email));
if (count($mail_user_get) > 0) {
# Update data
$mail_user_get['password']=$password;
$mail_user_get['move_junk']='y';
$affected_rows = $client->mail_user_update($session_id, 0, $mail_user_get[0]['mailuser_id'], $mail_user_get);
if ($affected_rows == 0) {
toLog('No change for '.$email, 'error');
} else {
toLog('Ok for '.$email, 'info');
}
} else {
toLog('email '.$email.' not present in ISPconfig', 'warn');
}
} catch (SoapFault $e) {
echo $client->__getLastResponse();
die('SOAP Error: '.$e->getMessage());
}
}
}
}
}
if($client->logout($session_id)) {
toLog('Logged out.', 'info');
}
?>
IMAP subscriptions
La souscription au dossier IMAP (le fait de voir ou non certains dossiers et/ou d’en cacher d’autres) n’a pas migré, donc si l’utilisateur avait ajouté un dossier IMAP, il ne le voyez plus sur le nouveau serveur, pourtant le dossier est bien là.. c’est fâcheux. Pour corriger ça, lancez ce petit script sur le Plesk (source) :
Ce script ajoute une politique de spam “normal” (modifiable) et récupère les anciennes clefs DKIM générées par Plesk pour les appliquer dans ISPconfig. Ceci pour éviter d’avoir à retoucher au DNS pendant la migration (toujours à lancer depuis le Plesk) :
En sortie le script donne quelques commandes « rsync » à exécuter par un copier / coller direct dans le terminal du serveur source (Plesk) pour synchroniser les données (archives, paramètres…)
Ensuite sur le serveur decdestination (ISPconfig) lancez la commande :
/var/lib/mailman/bin/check_perms -f
Conclusion
La migration c’est bien passée, c’est transparent pour l’utilisateur, à part le problème de « mot de passe chiffré » à « mot de passe normal », qu’il faut faire changer avant la migration de préférence.
Pour les besoins de mes activités pro et associatives, j’ai besoin de faire de la sauvegarde quotidienne de serveur. Les serveurs c’est déjà plutôt énergivore en électricité/climatisation (quoi que pas tant que ça si on s’auto-héberge – pas de climatisation par exemple). Je cherche à faire diminuer le coup énergétique tant que je peux, et les sauvegardes ne sont pas en reste.
Froide : c’est-à-dire qui ne serait allumée qu’au besoin (au moment de la sauvegarde) et pas allumée 24h/24 comme à l’habitude dans un datacenter.
Faible consommation : Puisque composée d’un Raspberry Pi et d’un disque dur 2,5° = consommation ~3Wh
Auto-hébergée : ça veut dire « à la maison », ça évite les climatiseurs des datacenters (vitaux quand la concentration de serveurs est forte) et on garde le contrôle sur les données/le matériel.
En solution logiciel, j’utilise Dirvish, qui est une surcouche à Rsync, qui permet (en gros) de faire des sauvegardes « full » tous les jours en ne copiant que les différences. En gros il ne télécharge et enregistre que les fichiers différents de la veille et utilise l’adresse INODE sur le disque des fichiers qui n’ont pas changé. De cette façon, toute l’arborescence est complète tous les jours mais elle ne prend pas plus d’espace disque que la différence (un peu magique quand on ne connait pas le fonctionnement d’un partitionnement sous linux). De cette façon, ma sauvegarde quotidienne prend ~1h pour sauvegarder ~150Go sur 4 serveurs.
Le matériel utilisé
J’utilise donc pour mes sauvegardes à froid :
Un Raspberry Pi (4 ici mais pas vraiment d’importance – quoi que avec un Zero j’ai essayé c’est pas terrible en perf…)
Un disque dur 2,5° mécanique (ça serait encore plus économe en électricité avec un SSD) dans un boîtier USB 3.0
Le matériel utilisé (Raspberry PI + Disque dur SATA USB3 2,5°)Consommation constatée au Wattmètre : 3W
Consommation totale : 3Wh constaté au Wattmètre
Comparatif consommation
Pour comparaison (discutable j’en conviens) dans mon cas avec la solution choisie et une VM ou un serveur que j’aurais pu louer dans un datacenter :
RaspberryPi + Disque
Datacenter
Temps d’allumage
Le temps de la sauvegarde (ici ~1h mais variable)
24h/24h
Consommation électrique (W)
3
8 à 170 (1)
Consommation journalière (Wh/j)
3
192 à 4080
(1) Consommation serveur nuancée entre une VM (8W) et un serveur physique dédié (170W) – chiffres de l’ADM (source). C’est tout relatif, ça dépend des cas, c’est une hypothèse de travail. Je n’ai pas non plus considéré les équipements actifs pour simplifier (chez moi juste une box, dans un datacenter beaucoup de switch/routeurs : même s’ils sont mutualisés, ça a un coût énergétique).
Avec cette méthode de sauvegarde à froid, dans mon cas, on est entre 64 et 1360 fois moins énergivore que dans le cas d’une sauvegarde ‘classique » en datacenter.
L’allumage automatique peut se faire de différente façon :
BIOS : certain bios permette un « réveil » à heure fixe mais ce n’est pas le cas du Raspberry Pi
WakeOnLan (fait par le serveur a sauvegarde par exemple)
Une prise programmable avec l’heure
PvMonit (dans mon cas) logiciel avec lequel je gère le surplus de mon énergie solaire
Dans tous les cas, le Raspberry Pi s’éteint de lui même après la sauvegarde (shutdown -h now dans le script à la fin de la sauvegarde).
Il y a quand même des désavantages à faire la sauvegarde « à la maison » :
Débit montant limité : dans le cas ou il faut remonter le serveur en entier (toute la sauvegarde) ça peut prendre un certain temps car le débit montant d’une box est souvent faible
Ce cas est très très rare
Ce défaut n’est plus si on est en situation auto-hébergée : on va brancher notre disque dur avec la sauvegarde directement sur le serveur à reconstruire
Restaurer à distance peut être problématique : si on est pas sur site et qu’on a besoin d’accéder aux sauvegardes, ça peut être problématique
Tout dépend de la conception pour l’allumage automatique. Dans mon cas, je peux allumer à distance au besoin avec PvMonit.
Après quelques tests de débits/écritures, voici ce que je constate sur ce « nas » de sauvegarde :
root@nas(ro):/mnt/nas# curl -4 -o ./test100M http://bouygues.testdebit.info/100M.iso
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 95.3M 100 95.3M 0 0 7145k 0 0:00:13 0:00:13 --:--:-- 7509k
En comparaison avec mon ordinateur :
david@monordinateurportable:/tmp$ curl -4 -o ./test100M http://bouygues.testdebit.info/100M.iso
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 95.3M 100 95.3M 0 0 8424k 0 0:00:11 0:00:11 --:--:-- 8689k
A ~100k de différence ça me semble pas significatif voir même plutôt bon ! (surpris même que ce soit si bon…)
Je ne maintient actuellement plus PvMonit. Je tâche de faire prochainement un article pour vous donner quelques alternative.
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.
Nouvelle version pvmonit dispo ici. Avec une « sur-couche » à PvMonit pour gérer le surplus d’électricité : 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 standardPvMonit avec détailsEmoncms 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 multiLe raspberry tout à gaucheLa pince ampèremétrique USB pour la consommation de l’habitatSché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 connexionLe Shield de l’arduino mega en cours de soudureTest de récupération des données avec Arduino et câble ve.direct DIYLe câble ve.direct DIYSonde de courantLe tout connecté et fonctionnelL’é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)
#!/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
function portsentryOpen() {
. ${PORTSENTRYCONF}
IFS=',' read -ra TCP_PORTS_SPLIT <<< "${TCP_PORTS}"
for TCP_PORT in "${TCP_PORTS_SPLIT[@]}"; do
${IPT} -A INPUT -p tcp --dport ${TCP_PORT} -j ACCEPT
done
IFS=',' read -ra UDP_PORTS_SPLIT <<< "${UDP_PORTS}"
for UDP_PORT in "${UDP_PORTS_SPLIT[@]}"; do
${IPT} -A INPUT -p udp --dport ${UDP_PORT} -j ACCEPT
done
}
# Remise a 0
${IPT} -F
${IPT} -t nat -F
# Les connexions entrantes sont bloquées par défaut
${IPT} -P INPUT DROP
# Les connexions destinées à être routées sont acceptées par défaut
${IPT} -P FORWARD ACCEPT
# Les connexions sortantes sont acceptées par défaut
${IPT} -P OUTPUT 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} -A INPUT -i lo -j ACCEPT
# Accepter le protocole ICMP (notamment le ping)
${IPT} -A INPUT -p icmp -j ACCEPT
# Accepter les packets entrants relatifs à des connexions déjà
# établies : cela va plus vite que de devoir réexaminer toutes
# les règles pour chaque paquet.
${IPT} -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# ftp
${IPT} -A INPUT -p tcp --dport 20 -j ACCEPT
${IPT} -A INPUT -p tcp --dport 21 -j ACCEPT
# Préalabielemnt, pour pure-ftpd : echo "29700 29750" > /etc/pure-ftpd/conf/PassivePortRange ${IPT} -A INPUT -p tcp --dport 29700:29750 -j ACCEPT
# SSH
${IPT} -A INPUT -p tcp --dport 222 -j ACCEPT
# NTP
${IPT} -A INPUT -p udp --dport 123 -j ACCEPT
# smtp
${IPT} -A INPUT -p tcp --dport smtp -j ACCEPT
# Pour test bricolage smtp
${IPT} -A INPUT -p tcp --dport 587 -j ACCEPT
# imap(s)
${IPT} -A INPUT -p tcp --dport 143 -j ACCEPT
${IPT} -A INPUT -p tcp --dport 993 -j ACCEPT
# sieve
${IPT} -A INPUT -p tcp --dport 4190 -j ACCEPT
# dns
${IPT} -A INPUT -p tcp --dport domain -j ACCEPT
${IPT} -A INPUT -p udp --dport domain -j ACCEPT
# http
${IPT} -A INPUT -p tcp --dport http -j ACCEPT
# https
${IPT} -A INPUT -p tcp --dport https -j ACCEPT
# Maintenance
if [ "$1" == "maintenance" ] ; then
echo "Maintenance On"
/usr/sbin/service lighttpd start
${IPT} -A INPUT -p tcp --dport 81 -j ACCEPT
${IPT} -t nat -A PREROUTING \! -s ${MOI} -p tcp --dport 80 -j DNAT --to-destination ${SRV1}:81
${IPT} -t nat -A POSTROUTING -j MASQUERADE
elif [ -f "/var/run/lighttpd.pid" ] ; then
echo "Maintenance Off"
/usr/sbin/service lighttpd stop
fi
# Portsentry
if [ -f ${PORTSENTRYCONF} ] ; then
portsentryOpen ${IPT} ${PORTSENTRYCONF}
fi
# End
${IPT} -A INPUT -j LOG --log-prefix "iptables denied: " --log-level 4
${IPT} -A INPUT -j REJECT
# Si vous utilisez fail2ban, relancé à la fin du script :
#/usr/sbin/service fail2ban restart
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 :
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)
$ 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…
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 :
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 :
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