PvMonit Domotique v1 béta

Note : c’est une version béta car j’ai pas mal de BUG avec le tm1638, du coup je vais changer mon fusil d’épaule pour la version 2, donc cet article c’est « pour la mémoire », « pour la gloire », mais pas pour la vrai vie…

Ou comment utilisé le surplus d’une installation solaire autonome

Dans le cas d’une installation solaire autonome (non raccordé au réseau EDF), une fois que les batteries sont rechargé (ce qui se produit au alentour de 11h-12h pour moi 80% du temps) il y a de l’énergie potentiel de perdu. Plus précisément si je n’utilise pas cette énergie au moment ou il y a du soleil (de la production) cette énergie n’est pas utilisé. On peut augmenter le stockage mais c’est infini, coûteux en argent en ressource environnementale.

Du coup m’a semblé pertinent de réfléchir à un moyen d’automatisé certaine tâche qui me permette d’utilisé ce surplus d’électricité quand il est là. Actuellement je le fait de façon tout à fait manuel : quand les batteries sont pleine et qu’il y a du soleil, je lance une machin à laver, je lance la pompe de relevage de la phyto, je recharge mes batterie d’outil portatif…. Cette automatisation va aussi me permettre d’aller plus loin & d’envisagé d’installé un petit chauffe eau électrique de camion (~10L) ou autres…

Grâce à PvMonit j’avais déjà une remonté d’information sur l’état du système solaire, des batteries, de la production qui m’arrivait sur un Raspbery PI. il ne me restait plus qu’a « piloter des prises électrique » en fonction de l’état du système solaire et de conditions que je donne au programme.

Le cahier des charges c’était :

  • De pouvoir piloter ce que je veux, mon choix c’est donc porté vers un système de contrôle de relais (en gros des interrupteur contrôlé de façon électronique)
  • Que le système consomme très peu. C’est réussi le système consomme ~0,153W (tout les relais d’éteint), 0,4W avec 1 relais d’allumé (hors PvMonit…)
  • Que je puisse passé certain appareil en « marche forcé » ou en « stop forcé »
  • Que le système soit résilient, qu’il puisse encore fonctionné sans l’apport d’information du raspbery pi en cas de panne

Voilà de quoi est composé le tout :

  • Le raspbery pi (zéro ça suffit) sur lequel est installé PvMonit (expliqué ici)
  • Un arduino UNO qui reçois de potentiel ordre du Raspbery PI avec le protocole i2c. (6€)
  • Un afficheur 8 chiffres + 8 leds + 8 boutons (tm1638) nous permet d’interagire avec le système (forcé l’alumage, interdir l’allumage…) (~6€)
  • Une plaque de 8 relais (mais vous pouvez envisagez en avoir autant que vous voulez… ça correspond à mon besoin…) qui allume tel ou tel appareil pour (9€)

ça nous fait un projet à ~25€ (hors PvMonit) si on considère les fils de prototypage, le câble usb pour l’arduino…

Actuellement je m’en sert pour :

  • Allumer ma box et mon téléphone fixe quand les batteries sont presque pleines (quand le régulateur passe en ABS)
    • Éteindre le téléphone après 19h
    • Éteindre la box après 19h SI plus aucun PC n’est allumé (scan réseau IP)
  • Démarrer la pompe de relevage de la phytoépuration quand les batteries sont pleines
  • Recharger mes batteries d’outils électroportatifs quand la pompe de relevage c’est allumé puis c’est éteinte
  • Démarrer un disque dur externe et ma box pour sauvegarder un serveur en ligne si les batteries ne sont pas trop basses

Et dans le futur :

  • Recharger un vélo électrique l’été
  • Démarrer un petit chauffe eau
  • ?

Le champs des possibles :

  • Allumer un groupe électrogène automatiquement par contacteur si les batteries passe sous un certain seuil
  • Remplir un surpresseur
  • Remonter de l’eau d’un puits
  • Lancer une production d’hydrogène ? …
  • …All is possible …

A l’heure actuelle mes relais sont majoritairement connecté sur un bandeau de prise, ça me permet d’être résiliant. En cas de pépin, si ça marche pas/plus, je peux repassé en mode manuel et débrancher/brancher les prises facilement.

Prés-requis :

  • PvMonit installé et fonctionnel
  • Un BMV de chez Victron de connecté sur PvMonit c’est le mieux, sinon un MPPT de chez Victron toujours (seul constructeur supporté par PvMonit à l’heure actuel)
  • En matériel :
  • Compétence : programmation python (a l’heure actuelle aucune interface graphique n’est à disposition pour organiser les ordre au relais, c’est envisagé pour le futur…)

Pour l’installation, rendez-vous sur la page du projet, dossier « domo » : https://framagit.org/kepon/PvMonit/tree/master/domo

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 !

Fin de chantier 2019 : Bilan humain/financier 2

J’avais déjà fais un bilan humain et financer après la grosse saison de chantier participatif 2018. En 2019 il le bilan n’a pas beaucoup évolué parce qu’on avait fait le plus gros du boulot en 2018 :-). Mais quand même :

Bilan humain

  • En 2018 : ~4 mois de chantier participatif avec ~90 personnes différentes qui sont passé sur le chantier durant ce temps
  • En 2019 : ~2 semaines de chantier participatif et une petite dizaine de nouveau participants (en plus des anciens qui sont repassé…)

~100 personnes sont passées donner de leur temps pour apprendre/échanger sur notre chantier MERCI A VOUS !

Dans les grandes lignes, j’ai estimé à plus de 411 jour-homme le temps de travail en chantier participatif. A ça j’ajoute notre temps hors chantier participatif à préparer/tester les techniques/faire des trucs qui ne ce fond pas en groupe, j’estime ça à 270 jour-homme. Sans parler du temps de lecture, de formation, de préparation, de récup’ des matériaux… c’est inestimable et pour donner une louche on va mettre aussi 270 jour-homme. Ce qui nous fait un total de 951 jour-homme de travail pour cette paillourte. c’est vertigineux mais ça doit pas être loin de la vérité, ça vous donne une idée de ce qui vous attends avant de vous lancer… 😉

Bilan financier

Sans grosse surprise, on a pas acheté grand chose de plus qu’au dernier bilan, donc on reste autour des ~17 000€ (juste la maison de ~40m² habitable) et je le répète, j’ai certainement oublié plein de petites choses, mais l’essentiel est là, j’ai pas non plus poussé le vice à garder les tickets d’essence quand on faisait les courses matériaux… hein…

Le détail c’est par là :

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" 
  }
}
';
                if (is_array($ServerAlias)) {
                    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

Questions fréquentes sur la paillourte

Le permis de construire

Beaucoup de questions autour du permis de construire :

« Est-ce que tu as fait une demande de permis de construire ? »

Oui, la paillourte est déclarée, elle est en zone constructible, donc cadastrée et tout le bazar…

« C’est conforme à la RT2012 » (RE2020)

Oui et non. La réglementation thermique en vigueur pour les bâtiments neufs au moment de ma construction est bien la RT2012. Cependant depuis le 1er janvier 2015, les bâtiments <50m² n’y sont plus soumis. Ils sont soumis à la RT Bâtiment (source) dont voici le texte. C’est une réglementation beaucoup plus souple, sans contrôle obligatoire payant (le test d’infiltrométrie en l’occurrence, donc pas d’obligation d’étanchéité à l’air parfaite), chauffage au bois possible car pas non plus d’étude thermique obligatoire payante… Du coup notre paillourte fait 49,5m² au nu du mur extérieur (ce qui ne fait plus que ~40m² intérieur avec l’épaisseur des murs en paille).

Mise à jour 2023 : Depuis la RE2020 est en vigueur, mais il est toujours possible d’avoir une déclaration (pas d’étude/calcul) sous les 50m2. (source). Certaine exigence de construction demeure tout de même (minimum d’isolation par exemple…) et il faut une attestation pour le permis qu’on peut générer gratuitement par ici.

« Est-ce que tu as eu des difficultés à l’avoir ? La mairie n’a pas été trop pénible ? »

Pas de difficulté. Avant d’acheter et d’envisager la paillourte j’avais éplucher le PLU de ma commune et j’avais rencontré la chargée de l’urbanisme pour lui parler du projet, voir si j’avais rien oublié dans le PLU…

Le PLU s’intéresse à l’aspect esthétique / extérieur uniquement. Du coup, inutile de parler de paille ou terre… Dans tous les cas, il y a, je pense, extrêmement rarement des contraintes de forme (rond, carré, rectangle…). Les points bloquants pourraient être :

  • Des restrictions sur la toiture : par exemple obligation de couvrir en tuile dans certain village typique… Mais depuis la loi grenelle 2, il est interdit d’interdire tout dispositif « favorisant la retenu des eau pluviales » (Inscrit dans le code de l’ubanisme L111-16, article R111-23 (source)
  • Des restrictions sur la couleur des murs : Toutes les maisons doivent avoir les murs blancs… ça va ajouter un sur-coût mais il n’est pas impossible de teinter l’enduit extérieur avec des pigments d’ocre, ou de faire un lait de chaux (même si ça peut être dommage parce que la couleur de la terre c’est tellement beau…).

Mes propos deviennent caduques si le terrain se trouve hors zone constructible ou près d’un monument protégé. Il y a un paquet d’églises en France, faut pas trop s’en approcher sinon il y a les architectes des bâtiments de France qui étudient aussi le sujet et leur regard est plus « personnel » que l’interprétation d’un texte…

« Est-ce que tu peux me transmettre les documents donnés pour le permis ? Ça serait vraiment une super base pour faire la notre sans être obligé de faire appel à un architecte. »

Pour une maison de moins de 150m² il n’est pas obligatoire d’avoir recours à un architecte. C’est moi qui ai rédigé le permis de construire, fait les plans, etc… C’est du boulot, du gros boulot même, mais le faire soit même c’est une grosse économie.

Voici le dossier de permis de construire avec PCMI1, 2, 3, 4, 5, 6, 8 :

Mais ça ne va avancer personne… Les permis sont très « personnalisés » en fonction de là où on est en France, du PLU, de la zone de construction sur le cadastre. Tout ça fait varier le nombre de pièces à fournir. Les contraintes esthétiques, combien de portes, de fenêtres vous voulez… bref ça sert à rien de copier, ça sera différent. Mais je vous le mets quand même pour avoir une idée….

Combien ça coûte une paillourte ?

Je ne sais pas pour « les paillourtes » (il doit y avoir autant de paillourtes différentes que de constructeurs), mais pour la mienne, je sais le dire : le détail est sur cette page : Bilan humain/financier

Tu es du métier ?

Non du tout, j’ai une formation en électronique/informatique. Par contre, je ne me suis pas lancé comme ça. J’ai fais BEAUCOUP de chantiers participatifs (pendant un temps, je ne faisais quasiment que ça de mon temps libre/mes vacances…). J’ai suivi des petits modules de formation/stage par ici ou par là, j’ai lu beaucoup de livres, rencontré des auto-constructeurs qui avaient un projet similaire pour avoir des retours d’expériences sur leur vécu… Bref ça ne s’improvise tout de même pas.

T’as pas peur que ça brûle une maison en paille ?

Avez-vous déjà essayé de mettre le feu à un annuaire téléphonique ? C’est très difficile, parce qu’il n’y a pas d’oxygène entre les pages. Et bien c’est pareil avec la paille en bottes (utilisée dans la construction ici). C’est de la paille compressée au même titre que les pages de l’annuaire, la paille se consume donc très doucement.

Une vidéo ou des pompiers mettent le feu à une maison en paille terminera de vous convaincre :

T’as pas peur que les rongeurs mangent toute la paille ?

Les rongeurs mangent les céréales, pas les brins de paille. Les céréales ont été moissonnées avant la mise en botte, il n’y a donc normalement plus (ou quasi) à manger pour les rongeurs. Ceci étant, ils peuvent vouloir venir se mettre au chaud l’hiver (comme dans tout les isolants), il faut donc soigner les enduits et les faire d’au minimum 3, 4 cm pour éviter les intrusions.

Script API Ispconfig : changement d’IP dans toutes les zones DNS

Je m’occupe d’un service d’hébergement destiné aux actions politiques / citoyennes / artistiques… Ce service va rejoindre physiquement des voisins/copains eux aussi CHATONS : https://retzien.fr/. Nous allons mutualiser les serveurs et le temps de cerveau alloué au tâches administrative qui incombe à la gestion de ce type de service.

Pour préparer la migration de serveur j’ai fais un petit script qui se connecte à l’API d’ISPconfig et qui change tout les enregistrements DNS A ayant l’IP « X » par l’IP « Y » dans toutes les zones DNS du serveur. Ce script peut aussi s’avérer très utile en cas de changement de box internet Il se lance comme ceci :

php dnsChange.php -o=IP_ORIGINALE -n=NOUVELLE_IP

Le voici

<?php
/* 
 * Script de modification des enregistrements DNS A en cas de changement d'IP serveur
 * 
 * Exemple de lancement : 
 * 		php dnsChange.php -o=IP_ORIGINAL -n=NOUVELLE_IP
 * 
 * Sous licence Beerware
 * Par David Mercereau : http://david.mercereau.info
 */

// Configuration de la connexion ISPconfig
$CONFIG['remoteUser'] = 'UTILISATEUR DISTANT API ISPCONFIG';
$CONFIG['remotePassword'] = 'MOT DE PASSE DE L'UTILISATEUR DISTANT API ISPCONFIG';
$CONFIG['remoteSoapLocation'] = 'https://localhost:8080/remote/index.php';
$CONFIG['remoteSoapUri'] = 'https://localhost:8080/remote/';


// Test arguments
$options = getopt('o:n:');
if (count($options) < 2) {
	exit("Certains arguments sont manquants. -o ANCIENNEIP -n NOUVELLEIP .\n");
}
if (!filter_var($options['o'], FILTER_VALIDATE_IP)) {
        exit("L'origin n'est pas une IP valide.\n");
}
if (!filter_var($options['n'], FILTER_VALIDATE_IP)) {
        exit("La nouvelle IP n'est pas une IP valide.\n");
}

// Connexion à 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'])) {
	echo "Login Ok. Session ID:".$session_id."\n\n";
}

echo "############################################################################################################################\n";
echo "Recherche de l'IP ".$options['o']." dans tout les enregistrements A des zones DNS du serveur pour la remplacer par ".$options['n']."\n";
echo "############################################################################################################################\n\n";

try {

	$dns_a_gets = $client->dns_a_get($session_id, -1);
        $nb_dns_a_get=0;
	foreach ($dns_a_gets as $dns_a_get) {
                if ($dns_a_get['type'] == 'A' && $dns_a_get['data'] == $options['o']) {
                        $nb_dns_a_get++;
                        $dns_zone_get = $client->dns_zone_get($session_id, $dns_a_get['zone']);
                        echo "Ip trouvé dans la zone ".$dns_zone_get['origin']." avec l'enregistrement ".$dns_a_get['name'].".".$dns_zone_get['origin'].". Voulez-vous la remplacer ? (Y/n) \n";
                        $handle = fopen ("php://stdin","r");
                        $line = fgets($handle);
                        if(trim($line) == 'yes' || trim($line) == 'y' || trim($line) == 'Y' || trim($line) == 'Yes'){
                                $dns_record = $client->dns_a_get($session_id, $dns_a_get['id']);
                                //print_r($dns_record);
                                $dns_record['data']=$options['n'];
                                //print_r($dns_record);
                                $affected_rows = $client->dns_a_update($session_id, $dns_a_get['sys_userid'], $dns_a_get['id'], $dns_record);
                                echo "Le changement à bien été opéré sur ".$affected_rows." enregistrement\n";
                        } else {
                                echo "Aucun changement effectué sur ".$dns_a_get['name'].".".$dns_zone_get['origin']."\n";
                        }
                        fclose($handle);
                }
        }

        if ($nb_dns_a_get == 0) {
                echo "Aucun enregistrement A avec l'IP  ".$options['o']."  n'a été trouvé. \n";
        }
	if($client->logout($session_id)) {
		echo "\nLogged out\n";
	}


} catch (SoapFault $e) {
	echo $client->__getLastResponse();
	die('SOAP Error: '.$e->getMessage()."\n");
}

?>

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