PvMonit v2.0 + Domotique : Gestion surplus électrique solaire en autonomie

Ou comment utiliser le surplus d’une installation solaire autonome

Dans le cas d’une installation solaire autonome (non raccordée au réseau EDF), une fois que les batteries sont rechargées (ce qui se produit aux alentours de 11h-12h pour moi 80% du temps), il y a de l’énergie potentielle de perdue. Plus précisément, si je n’utilise pas cette énergie au moment où il y a du soleil (de la production), cette énergie n’est pas utilisée. On peut augmenter le stockage mais c’est infini, coûteux en argent et en ressource environnementale. Voilà un graphique pour illustrer ce propos :

Courbe production solaire estivale en situation d’autonomie électrique avec des panneaux photovoltaïques

Du coup, il m’a semblé pertinent de réfléchir à un moyen d’automatiser certaines tâches qui me permettent d’utiliser ce surplus d’électricité quand il est là. Actuellement, je le fais de façon tout à fait manuelle : quand les batteries sont pleines et qu’il y a du soleil, je lance une machine à laver, je lance la pompe de relevage de la phyto, je recharge mes batteries d’outils portatifs…. Cette automatisation va aussi me permettre d’aller plus loin & d’envisager d’installer un petit chauffe-eau électrique de camion (~10L) ou autres…

Grâce à PvMonit, j’avais déjà une remontée d’informations sur l’état de l’installation solaire, des batteries, de la production qui m’arrivait sur un Raspberry PI. Il ne me restait plus qu’à « piloter des prises électriques » en fonction de l’état de l’installation solaire et des conditions que je donne au programme.

Soutenir / Commander

Si vous voulez soutenir le projet ou que vous n’avez pas suffisamment de compétences pour faire tout ça, je peux tout vous préparer à la maison, il n’y aura plus qu’à brancher… C’est à prix libre et c’est sur mesure selon vos compétences/besoins, on en parle ? : https://david.mercereau.info/pvmonit/#shop

Le projet, en vidéo

Le projet, en image

Voilà de quoi est composé le tout :

  • Le raspberry pi (zéro ça suffit) sur lequel est installé PvMonit (expliqué ici) : compter entre 110 et 200€ de matériel
  • Carte module 8 relais 8,99€
  • TM1638 Afficheur 8 chiffres 7 segments, 8 LEDs, 8 boutons (option) 5,49€

Si vous n’aimez pas les vidéos je vous mets des z’images :

Installation

Pour l’installation, vous pouvez vous reporter au dépôt du code source PvMonit, dossier « domo » : https://framagit.org/kepon/PvMonit/blob/master/domo/

Si vous avez des questions / bugs, c’est par ici : https://framagit.org/kepon/PvMonit/issues

file2link : Stockage de fichier temporaire contre lien

Depuis que Framasoft à annoncé sa Déframasoftisons Internet, en tant que membre des CHATONS (avec zici.fr & retzien.fr), je me suis dis que c’était l’heure de se retrousser les manches.

Faire un framadrop ça me semblait accessible, par contre Lufi (utilisé par framadrop) c’est codé en Perl et sur les serveurs de l’asso on est plus en mode PHP (et j’essaie de pas trop me disperser et pas héberger : un coup du perl, un coup du python, un coup du ruby, du node.js… c’est plus facile à maintenir) Sauf qu’en PHP je n’ai pas trouvé de logiciel maintenu similaire qui répondent à mes attentes, du coup j’en ai pondu un : file2link.

Bien sûr tout est libre de droit, file2link est sous licence beerware.

Petit tour en images :

Si vous l’utilisez, dites le moi, ça me parait pertinent qu’on fasse du lien avec toutes les instances…

Fonctionnalités

Dans sa version 0.1 le logiciel permet :

  • Uploader des fichier (plusieurs possible) et de recevoir des liens en échanges :
    • Lien direct
    • Lien de téléchargement forcé
    • Lien vers un zip contenant tout les fichiers
  • Images redimensionné à l’upload possible
  • Mémorisation des fichiers précédaient uploadé (via le storages local du navigateur
  • Se configure avec un fichier YAML
  • Configure with YAML file :
    • Limite dans le temps
    • Limite le type de fichier (via mime)
    • Limite le nombre de fichier envoyé simultanément
    • Limite de type de fichier
  • Bar de progression en HTML5
  • Multi-langue (français / anglais pour le moment)
  • Ménage des fichiers expiré par tâche cron (cron.php) ou par traffic sur la page d’accueil (web cron)
  • Personnalisation du contenu de la page avec la possibilité de créer des pages header-page.php, header.php, footer-page.php, footer.php, start-home.php, end-home.php
  • Ajout d’un menu vers des pages HTML pour créer des pages « contact » « mention légal »…

Installation

Pré-requis :

  • Un serveur http configuré compatible avec htaccess / url rewriting (apache2 typiquement
  • PHP 5.6 minimum
  • Lib php : GD & ZIP

Envoyer le contenu du dépôt sur votre serveur :

git clone https://framagit.org/kepon/file2link.git

Déplacer le fichier de conf distribué :

mv config.yaml.exemple config.yaml

Modifier le fichier config.yaml, changé le baseUrl et autres paramètres que vous souhaitez personnalisé. Assuré vous de la cohérence des paramètres :

  • maxUploadPerFile doit être similaire à la config PHP upload_max_filesize and post_max_size
  • maxUploadNbdoit doit être similaire à la config PHP config max_file_uploads

Assurez vous que le répertoire « files » soit accessible en écriture pour le servuer

Option : si vous voulez faire le ménage par tâche cron modifier la valeur expireCron par « cron » dans le fichier config.yaml et ajouter votre tâche cron :

* * * * * cd /var/www/file2link/ ; php cron.php

Et voilà, fin de chantier !

PvMonit v1.0 : Monitoring de mon installation photovoltaïque autonome

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

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 ;
Version Raspberry PI 3BVersion Arduino + Raspberry Pi 0
Consommation électrique0,37A (pi 3b) * 5V = ~1,85W0,22A (pi 0) + 0,08A (arduino MEGA) = 0,30A * 5V = ~1,5W
Difficulté********
Prix matériel (détails)200 €110 €

Raspberry Pi 3B & Ve.direct USB (officiel)

L’usage des câbles ve.direct USB officiel permet de simplifier le montage.

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

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

J’ai fais un très long tuto d’installation dans le fichier INSTALL.md du dépôt git : https://framagit.org/kepon/PvMonit/blob/master/INSTALL.md

ISPConfig : Un mode maintenance avec SSL

By RRZEicons (Cc-sa)

Afin de réaliser des maintenances ou migration sur mon serveur qui héberge ~100 sites et qui tourne avec le panel ISPConfig j’ai mis en place un petit mot d’excuse qui dit en substance : « maintenance en cours, merci de repasser plus tard ». C’est mieux que « La connexion a échoué » ou « Can’t Connect to MySQL Server on nian nian nian » non ?. C’était plutôt simple jusqu’à l’arrivé massive du SSL. parce que quand on tente de joindre https://david.mercereau.info ou https://zici.fr et qu’on est redirigé vers la même page de maintenance, avec le SSL ça coince / ça affiche un message d’erreur, normal… hors c’est ce qu’on cherche à éviter.

La configuration de prod en temps normal  :

  • Apache sur le port 80 & 443
  • Let’sEncrypt délivre les certificat SSL
  • Le tout est motorisé par ISPConfig

La configuration de maintenance :

  • Apache sur le port 80 & 443 (toujours)
  • Lighttpd sur le port 81 & 444
  • Iptables redirige le trafic arrivant sur le port 80 vers le port 81 en PREROUTING sauf pour mon IP (ça permet donc de bricoler)

Installation de lighttpd

Apété, et ayé :

aptitude -y install lighttpd
update-rc.d lighttpd remove
mkdir /var/www/maintenance
echo "Serveur en maintenance" > /var/www/maintenance/index.html # Vous pouvez faire une belle page html c'est mieux !

La configuration de lighttpd : /etc/lighttpd/lighttpd.conf

server.modules = (
	"mod_access",
)

server.document-root        = "/var/www/maintenance"
server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/var/run/lighttpd.pid"
server.username             = "www-data"
server.groupname            = "www-data"
server.port                 = 81
server.error-handler-404 = "/index.html"

index-file.names            = ( "index.html", "index.lighttpd.html" )
url.access-deny             = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )

include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

Récupérer la configuration SSL

J’ai fais un script qui récupère dans configuration apache (généré par ISPConfig chez moi), les chemins vers les certificats SSL Let’sEncrypt et qui (re)génère la conf lighttpd (qui crée le fichier /etc/lighttpd/conf-enabled/maintenance-mode-ssl.conf).

Préparation avant de lancer le script :

pear install config
mkdir /etc/lighttpd/certs/

C’est bon, on peut lancer le script :

<?php
require_once 'Config.php';

# Add include "maintenance-mode-ssl.conf" In lighttpd.conf
$lighttpdConfig='/etc/lighttpd/conf-enabled/maintenance-mode-ssl.conf';
# Content of SSL .pem
$ligttpdSslDir = '/etc/lighttpd/certs/';
# SSL port
$ligttpdSslPort = 444;

$sitesEnableds = scandir('/etc/apache2/sites-enabled/');
$lighttpdConfigContent='';
foreach($sitesEnableds as $sitesEnabled) {
    if ($sitesEnabled != '.' && $sitesEnabled != '..' && $sitesEnabled != '000-ispconfig.vhost' && $sitesEnabled !=  '000-apps.vhost' && $sitesEnabled != '000-default.conf' && $sitesEnabled != '000-ispconfig.conf') {
        $DocumentRoot=null;
        $ServerAlias=null;
        $ServerAliasMultiple=null;
        $ServerName=null;
        $conf = new Config();
        $root = $conf->parseConfig('/etc/apache2/sites-enabled/'.$sitesEnabled, 'apache');
        if (PEAR::isError($root)) {
            echo 'Error reading config: ' . $root->getMessage() . "\n";
            exit(1);
        }
        // Parse du fichier
        $i = 0;
        while ($item = $root->getItem('section', 'VirtualHost', null, null, $i++)) {
            foreach ($item->children as $child) {
                if ($child->name == 'ServerName') {
                    $ServerName = $child->content;
                }
                if ($child->name == 'ServerAlias') {
                    $ServerAliasMultiple=explode(" ", $child->content);
                    foreach ($ServerAliasMultiple as $ServerAliasOne) {
                        if (is_null($ServerAlias)) {
                            $ServerAlias[]=$ServerAliasOne;
                        } elseif (!in_array($ServerAliasOne, $ServerAlias))  {
                            $ServerAlias[]=$ServerAliasOne;
                        }
                    }
                }
                if ($child->name == 'DocumentRoot') {
                    $DocumentRoot = $child->content;
                }
            }
        }
        if ($ServerName != null && $DocumentRoot != null) {
            if (is_file(substr($DocumentRoot, 0, -3).'ssl/'.$ServerName.'-le.key')) {
                $key=file_get_contents(substr($DocumentRoot, 0, -3).'ssl/'.$ServerName.'-le.key');
                $crt=file_get_contents(substr($DocumentRoot, 0, -3).'ssl/'.$ServerName.'-le.crt');
                file_put_contents($ligttpdSslDir.'/'.$ServerName.'.pem', $key.$crt);
                $lighttpdConfigContent.='$HTTP["host"] == "'.$ServerName.'" {
  $SERVER["socket"] == ":'.$ligttpdSslPort.'" {
    ssl.engine = "enable" 
    ssl.pemfile = "'.$ligttpdSslDir.$ServerName.'.pem" 
  }
}
';
                foreach ($ServerAlias as $ServerAliasJustOne) {
                    $lighttpdConfigContent.= '$HTTP["host"] == "'.$ServerAliasJustOne.'" {
  $SERVER["socket"] == ":'.$ligttpdSslPort.'" {
    ssl.engine = "enable" 
    ssl.pemfile = "'.$ligttpdSslDir.$ServerName.'.pem" 
  }
}
';
                }
            }
        }
    }
}
file_put_contents($lighttpdConfig, $lighttpdConfigContent);
?>

ça doit générer quelque chose comme ça dans le fichier /etc/lighttpd/conf-enabled/maintenance-mode-ssl.conf :

$HTTP["host"] == "zici.fr" {
  $SERVER["socket"] == ":444" {
    ssl.engine = "enable" 
    ssl.pemfile = "/etc/lighttpd/certs/zici.fr.pem" 
  }
}
$HTTP["host"] == "david.mercereau.info" {
  $SERVER["socket"] == ":444" {
    ssl.engine = "enable" 
    ssl.pemfile = "/etc/lighttpd/certs/david.mercereau.info.pem" 
  }
}
$HTTP["host"] == "calcpv.net" {
  $SERVER["socket"] == ":444" {
    ssl.engine = "enable" 
    ssl.pemfile = "/etc/lighttpd/certs/calcpv.net.pem" 
  }
}
[...]

Maintenance On/Off

Pour se mettre en mode maintenance :

# Mon ip : 
IPMAISONDEMOI=X.X.X.X
# Lancer le script ci-dessus qui génère la conf SSL pour lighttpd 
php maintenance-ssl-lighttpd.php
# Démarrage du serveur d'excuse
service lighttpd start
# Redirection du port 80 vers 81 sauf pour mon IP
iptables -A INPUT -p tcp --dport 81 -j ACCEPT
iptables -A INPUT -p tcp --dport 444 -j ACCEPT
iptables -t nat -A PREROUTING \! -s ${IPMAISONDEMOI} -p tcp --dport 80 -j DNAT --to-destination ${IPDUSERVEUR}:81
iptables -t nat -A PREROUTING \! -s ${IPMAISONDEMOI} -p tcp --dport 443 -j DNAT --to-destination ${IPDUSERVEUR}:444
iptables -t nat -A POSTROUTING -j MASQUERADE

Et pour désactiver le mode maintenance :

# Si vous n'avez pas d'autres règles (c'est mal) :
iptables -F
iptables -t nat -F
# Sinon redémarrer votre service iptables 
# Lighttpd n'est plus utile
service lighttpd stop

Crowdin : intégration automatique des traduction (script)

Depuis mon précédent article d’appel à la traduction de CalcPvAutonome , datant d’il y a moins d’un mois. Il c’est passé un truc que je ne me serais pas imaginé. En effet, le projet à été traduit (partiellement ou complètement) en Néerlandais, Russe, Polonais, Indonésien, Espagnol, Italien, Japonais, Polonais, Turc, Ukrainien… j’en passe et des meilleurs…

Il semble que nombre des contributeurs (tous ?) arrivent de utopian.io, une plateforme qui rémunère les contributions des aux projets opensource (via steemit.com/). Je ne sais pas trop quoi en penser… c’est génial, ça a été très vite, mais je ne suis pas certain de la qualité (et j’ai pas trop moyen de le savoir). Même si il semble y avoir de la modération sur utopian, j’ai déjà eu un retour d’une Russe qui repassait derrière une autre qui avait fait vraiment n’importe quoi (selon elle…) mais bon moi et le Russe… c’est complexe de savoir qui dit vrai, je peux juste faire confiance et laisser la communauté autogérée.

En tout cas je n’aurai pas imaginé avoir autant de petit drapeau de traduction en haut de ce machin.

L’engouement à été tellement soudain que je me suis retrouvé débordé devant la quantité de traduction à intégrer. Du coup j’ai fait une moulinette pour l’intégration dans le projet avec l’API Crowdin.  Le script est en PHP et il permet :

  • Compilation sur crowdin
  • Téléchargement des traductions
  • Compilation en .mo
  • Mise à jour du lang.ini qui contient :
    • % d’avancement de la traduction
    • Liste des contributeurs (pour dire merci)

C’est à voir dans le dépot framagit.

Merci à Crowdin qui permet met à disposition sa plateforme hyper complète gratuitement pour les logiciels libres.

Pour vous en montrer un aperçu de sa puissance, Crowdin permet une traduction « en contexte », directement sur l’interface du site à traduire. A tester sur CalcPvAutonome par ici : calcpv.net/aa

CalcPvAutonome en V4.0 : ouverture sur l’international

D’abord un grand merci à nednet, coucou39, guillerette, mirrim, ppmt qui ont œuvré à la traduction vers l’anglais de CalcPvAutonome suite à mon appel.

Je passe la seconde en lançant un nouvel appel à la traduction. Cette fois-ci de l’anglais vers ce que vous voulez/pouvez, Espagnol, Portugais, Italien, Espéranto, Grec… Faites-vous plaisir !

La plateforme de traduction collaborative se trouve par ici : crwd.in/calcpvautonome

Petit rappel : CalcPvAutonome est un logiciel libre (licence Beerware) et gratuit de dimensionnement d’installation photovoltaïque en site isolé (autonome). Il se veut transparent (dans la méthode), pédagogique et surtout détaché de toute structure commercial.

Autre petite nouveauté depuis mon dernier article :

Pour tester, c’est par ici :

Appel au traducteur pour CalcPvAutonome (calculateur photovoltaïque autonome)

Edit 27/01/18 : Merci à tous, c’est bon nous sommes à 100% !

Je recherche des traducteurs Français > Anglais pour CalcPvAutonome. Plateforme de traduction : crwd.in/calcpvautonome

Petit rappel : CalcPvAutonome est un logiciel libre (licence Beerware) et gratuit de dimensionnement d’installation électrique solaire en site isolé (autonome). Il se veut transparent (dans la méthode), pédagogique et surtout détaché de toute structure commercial.

Suite à mon dernier article à son sujet, CalcPvAutonome à fait beaucoup de chemin. Au départ, il ne savait pas récupéré les données d’ensoleillement au delà de la France métropolitaine. Devant le nombre de demande extérieur à la France, j’ai pris mon clavier et maintenant j’utilise les données d’ensoleillement du projet PVGIS qui permet désormais à CalcPvAutnome d’aller de couvrir une bonne partie du globe. De ce fait je lance un appel au contributeur traducteur pour m’aider à traduire ce logiciel vers l’anglais. Une fois que ça sera fait, je passerai le logiciel en anglais natif et j’ouvrirai la traduction à toutes les langues du monde (rien que ça)

La plateforme de traduction collaborative est par ici : crwd.in/calcpvautonome

D’avance merci pour vos coups de mains / claviers…