La lecture de la découverte de nichées mortes de froid ou de chaud dans un nichoir m’a poussé à mesurer la température dans le mien, puis à connaître l’écart avec la température extérieure.
Un Raspberry Pi2 B étant déjà utilisé pour visualiser les nichées j’ai décidé de lui adjoindre deux sondes de température numériques DS 18B20, l’une qui sera placée dans le nichoir l’autre en dehors.
Au sommaire :
Deux sondes DS 18B20 pour suivre la température dans un nichoir et juste en dehors
L’idée
C’est la lecture de la découverte de nichées mortes de froid ou de chaud dans un nichoir qui m’a poussé à réaliser cette surveillance. J’avais déjà décrit il y a quelques mois la réalisation d’une webcam pour nichoir. Un Raspberry Pi2 B étant déjà utilisé pour visualiser les nichées j’ai décidé de lui adjoindre deux sondes de température numériques DS 18B20, l’une à l’intérieur du nichoir, l’autre en dehors.
Configuration de départ
Le Raspberry Pi 2 fonctionne sous Raspbian Wheezy kernel 4.1.19. Il est connecté au PC par liaison Ethernet. Il pilote une caméra v1, et via des ports GPIO l’éclairage du nichoir (lumière blanche et infra-rouge) et le filtre coupe infra-rouge.
Le PC tourne avec une distribution Archlinux. Une interface web commande caméra, LED et filtre. Il envoie les autres commandes au Pi2 par connexion SSH.
Dans la suite j’ai conservé les adresses IP et les identifiants en clair (de toute façon la NSA les a déjà interceptés 😉 ). Ils sont à adapter à votre cas.
Installation des sondes
L’article de François « Mesure de température 1-wire DS18B20 avec le Raspberry Pi » (source 1) a été un bon point de départ.
Câblage
Le GPIO 4 étant déjà pris j’ai raccordé les 2 composants au GPIO 17 (broche physique 11).
Mise en œuvre
Ouvrez /etc/modules avec nano en super-utilisateur et ajoutez les modules nécessaires : w1-gpio et w1-therm.
Ouvrez /boot/config.txt toujours avec nano en super-utilisateur et ajoutez les lignes :
# Sonde de température DS 18B20 dtoverlay=w1-gpio, gpiopin=17
Ici, le paramètre gpiopin est indispensable car je n’utilise pas le GPIO 4. C’est le GPIO par défaut et non pas obligatoire comme écrit bien souvent. Attention, le nombre à indiquer correspond à la numérotation GPIO BCM.
Enfin rebootez.
Maintenant on peut connaître les identifiants des sondes :
pi@raspberrypi ~ $ ls /sys/bus/w1/devices/ 28-000007f0acfc 28-000007f0c9f5 w1_bus_master1 pi@raspberrypi ~ $
et vérifier qu’elles fonctionnent :
pi@raspberrypi ~ $ cat /sys/bus/w1/devices/28-000007f0acfc/w1_slave 57 01 4b 46 7f ff 09 10 c7 : crc=c7 YES 57 01 4b 46 7f ff 09 10 c7 t=21062 pi@raspberrypi ~ $ pi@raspberrypi ~ $ cat /sys/bus/w1/devices/28-000007f0c9f5/w1_slave 4d 01 4b 46 7f ff 03 10 d8 : crc=d8 YES 4d 01 4b 46 7f ff 03 10 d8 t=20875 pi@raspberrypi ~ $
Pour déterminer la correspondance entre identifiant et composant, il suffit de poser le doigt sur l’un des deux et de voir quelle température a augmenté…
Utilisation de munin
Voulant récupérer automatiquement les mesures et les disposer en courbes je me suis servi de 2 articles sur PAB’s blog :
– Température suivie avec un Raspberry Pi B+, une sonde DS18B20 et Munin (source 2)
– Suivre l’état de son serveur avec Munin (source 3)
Installation
Sur le PC il suffit d’installer le programme superviseur munin. Toutefois il est intéressant d’installer aussi l’utilitaire chargé de récupérer les données munin-node pour vérifier que la configuration en local est déjà correcte.
Sur le Raspberry Pi seul munin-node est à installer :
pi@raspberrypi ~ $ sudo apt-get install munin-node
Configuration
Je me suis servi du Wiki Archlinux sur munin (source 4). Des adaptations sont nécessaires selon votre distribution
Sur le PC
Dans Archlinux les données type serveur sont stockées dans le répertoire /srv et pour du http dans /srv/http. C’est là qu’il faut créer le répertoire où munin rangera les mesures, les graphiques et les pages web associées ; et lui donner le bon propriétaire (en root) :
mkdir /srv/http/munin chown munin:munin /srv/http/munin
Edition de /etc/munin/munin.conf (en root)
En début de fichier, sous la ligne #htmldir /usr/share/munin/www, ajouter: htmldir /srv/http/munin
ou bien décommenter la ligne (enlever le # qui est en début de ligne) et saisir le bon répertoire.
A la section # a simple host tree sous [localhost]
[localhost] address 127.0.0.1 use_node_name yes
ajouter la référence du Raspberry à superviser : [raspberrypi]
[raspberrypi] address 192.168.7.8 use_node_name yes
[stextbox id= »warning » caption= »ATTENTION ! »]Le nom entre crochet doit absolument être identique avec le nom d’hôte du Raspberry. J’ai gardé le nom d’hôte par défaut.[/stextbox]
munin-node (si installé)
Le démarrer et en même temps autoriser son démarrage au boot (en root) :
systemctl enable --now munin-node
Pour voir les plugins (scripts chargés de collecter des informations) utilisables, entrer la commande (en root) :
munin-node-configure --suggest
Comme munin-node n’exécute que les plugins présents ou référencés dans le répertoire /etc/munin/plugins, il suffit d’y créer des liens symboliques vers les plugins vous intéressant (en root).
ln -s /usr/lib/munin/plugins/tel-plugin /etc/munin/plugins/tel-plugin
Si vous les voulez tous la commande (en root)
munin-node-configure --shell | sh
est nettement plus rapide 😉 .
Redémarrer munin-node pour qu’il prenne en compte les plugins choisis (en root) :
systemctl restart munin-node.service
Automatisation du relevé des informations surveillées
C’est possible avec le classique cron. Mais j’ai choisi d’essayer avec systemd qui permet d’utiliser des minuteries (timers en anglais).
D’abord créer le service ad hoc : fichier /etc/systemd/system/munin-cron.service
[Unit] Description=Mesure sur les noeuds surveillés After=network.target [Service] User=munin ExecStart=/usr/bin/munin-cron
Ensuite créer la minuterie : fichier /etc/systemd/system/munin-cron.timer
[Unit] Description=Prise de données toutes les... [Timer] OnCalendar=*-*-* *:00/7:00 [Install] WantedBy=multi-user.target
La syntaxe pour OnCalendar est la suivante :
une indication optionnelle de nom(s) de jour de la semaine en anglais (absente ici) suivie d’un espace,
aa-mm-jj ; ici les étoiles indiquent à n’importe quel(le) année, mois, numéro de jour ; espace
hh:mm:ss ; ici à n’importe quelle heure, et à la seconde 0, pour les minutes le / indique la répétition, 00 la minute de départ et 7 par exemple la valeur à ajouter.
Ainsi le service munin-cron sera déclenché à chaque minute 0 ou 7 ou 14 ou 21 ou… 56 puis 0 à nouveau (et non pas 3 issu de 56+7= 63 et 63-60=3).
Maintenant il faut recharger la configuration de systemd, démarrer la minuterie et autoriser son démarrage au boot. Connectez vous en tant que root et exécutez :
systemctl daemon-reload systemctl enable --now munin-cron.timer
Première vérification
Dans le navigateur internet entrer l’adresse : file:///srv/http/munin/index.html
Vous devriez voir la page d’accueil de munin avec localhost comme seul nœud. Au bout d’un moment les graphiques correspondant aux plugins choisis devraient s’afficher, avec de plus en plus de valeurs selon la cadence réglée dans la minuterie. Pour des valeurs de minuterie de 5 minutes ou plus la mise à jour de la page dans le navigateur se fait automatiquement à la cadence choisie (environ 2-3 minutes après le relevé des données).
En cas de souci, il est judicieux de consulter les fichiers de log dans /var/log/munin.
Sur le Pi2
Installer munin-node :
pi@raspberrypi ~ $ sudo apt-get install munin-node
Tous les liens symboliques vers les plugins utilisables sont créés dans /etc/munin/plugins.
Pour vérifier le bon fonctionnement entre le Pi et le PC il suffit de garder un ou deux plugin(s) :
pi@raspberrypi ~ $ ls -l /etc/munin/plugins pi@raspberrypi ~ $ sudo rm /etc/munin/plugins/plugin-non-voulu
Il reste à configurer munin-node
pi@raspberrypi ~ $ sudo nano /etc/munin/munin-node.conf
Vérifier le nom d’hôte et éventuellement le modifier. J’ai préféré le saisir.
Rappel : il doit être identique à celui entré dans /etc/munin/munin.conf dans le PC.
# Set this if the client doesn't report the correct hostname when # telnetting to localhost, port 4949 # host_name raspberrypi
Autoriser le PC à se connecter en ajoutant à la suite de
allow ^127\.0\.0\.1$ allow ^::1$
la ligne avec l’adresse IP du PC
allow ^192\.168\.7\.1$
Pour que cette nouvelle configuration soit prise en compte, redémarrer munin-node :
pi@raspberrypi ~ $ sudo service munin-node restart
Sur le PC le rechargement de la page file:///srv/http/munin/index.html doit faire apparaître raspberrypi en plus de localhost puis le(s) graphique(s) avec le(s) plugins conservé(s).
Le plugin « temperatures »
Ce plugin temperatures (sans accent) est un script bash. Pour l’écrire j’ai analysé le plugin load bien commenté et le plugin cpu pour comprendre comment faire tracer plusieurs courbes dans le même graphique. Naturellement le manuel de référence des plugins pour munin a été d’une grande utilité (source 5).
#!/bin/bash if [ "$1" = "config" ]; then echo 'graph_title Temperature dans et hors nichoir' echo 'graph_order nichoir dehors gel' echo 'graph_args -r --lower-limit -20 --upper-limit 50' echo 'graph_height 400' echo 'graph_width 800' echo 'graph_vlabel Celsius' echo 'graph_printf %.1lf' echo 'graph_info Comparaison des temperatures dans et hors du nichoir' echo 'graph_category nichoir' echo 'graph_period minute' echo 'nichoir.label Nichoir' echo 'nichoir.draw LINE' echo 'nichoir.colour cc2200' echo 'nichoir.info Temperature dans le nichoir' echo 'dehors.label Dehors' echo 'dehors.draw LINE' echo 'dehors.colour 1144ff' echo 'dehors.info Temperature hors du nichoir contre lui' echo 'gel.label Gel' echo 'gel.colour 000022' exit 0 fi GEL=0 NICHOIR=$(cat /sys/bus/w1/devices/28-000007f0acfc/w1_slave | grep "t=" | awk -F "t=" '{printf("%.1f\n", $2/1000)}') DEHORS=$(cat /sys/bus/w1/devices/28-000007f0c9f5/w1_slave | grep "t=" | awk -F "t=" '{printf("%.1f\n", $2/1000)}') printf "nichoir.value %.1f\ndehors.value %.1f\ngel.value %i" $NICHOIR $DEHORS $GEL
J’ai choisi une plage de températures de -20° à 50° (elle devrait être suffisamment large pour Toulouse 😆 d’où les paramètres de graph_args ; -r (rigid) empêche un réajustement automatique de l’échelle verticale.
La taille hauteur x largeur de 400×800 m’a le plus satisfait. Si la taille par défaut 200×400 vous convient les 2 lignes correspondantes sont inutiles.
Attention l’argument pour définir la couleur de trait est bien colour avec le u (anglais britanique) et non pas color (anglais américain) ; le paramètre est le code hexadécimal rouge vert bleu rrvvbb sans dièse.
Comme la précision de mesure des sondes est ± 0,5°, j’ai choisi de ne garder qu’une seule décimale pour les valeurs de température ; d’où le 1 dans les paramètres %.1f des printf et %.1lf de graph_printf.
Mais que fait donc là cette variable GEL, en plus fixée à 0 et donc en fait une constante? Avec munin 2.0.x la commande de tracé de ligne horizontale ne fonctionne plus. Voulant une ligne bien marquée à 0° j’ai trouvé ce moyen.
Afin d’avoir toutes les courbes dans le même graphique il faut regrouper les valeurs dans un seul printf d’où la dernière commande regroupant les 3 règles de formatage puis le contenu des 3 variables.
Ce script est à placer dans le répertoire /etc/munin/plugins.
Il faut le rendre exécutable :
pi@raspberrypi ~ $ sudo chmod 755 /etc/munin/plugins/temperatures
et dire à munin-node de le prendre en compte :
pi@raspberrypi ~ $ sudo service munin-node restart
Avec un serveur web sur le PC ?
Si vous ne comptez pas visualiser les graphiques avec un autre ordinateur ce n’est pas nécessaire. Il suffit d’utiliser dans un navigateur l’adresse : file:///srv/http/munin/index.html
Par contre pour le faire depuis une autre machine il faut avoir un serveur web installé et tournant sur le PC. Dans mon cas j’avais déjà lighttpd sur le PC. J’ai eu la bonne surprise de constater que sans aucun réglage supplémentaire cela fonctionnait immédiatement :
– adresse dans le navigateur du PC (juste pour vérification) : http://localhost/munin
– adresse dans le navigateur d’une autre machine connéctée au réseau local : http://192.168.7.1/munin
Le PC tourne sous Archlinux avec munin en version 2.0.26 et lighttpd en version 1.4.43.
Test
Pour pouvoir tester des températures négatives j’ai soudé une sonde à un câble 3 conducteurs d’une longueur de 12 mètres afin d’atteindre le réfrigérateur avec partie congélateur. J’ai enveloppé cette sonde dans un peu de film micro-onde et l’ai mise dans le bas du réfrigérateur puis dans 2 endroits du congélateur puis retour. Pendant ce temps l’autre sonde est restée bien au chaud fichée dans la platine d’essai.
Voici le graphique obtenu avec une cadence de mesure de 5 minutes :
Conclusion
Cette réalisation est destinée à être installée dans le nichoir au côté du Raspberry Pi2 de la caméra avec son filtre coupe-infrarouge et des LED d’éclairage. Je pense régler la cadence de relevé de température à 10 minutes.
Pour l’instant tout est câblé sur platine d’essai mais avec la caméra raccordée au Raspberry. J’ai constaté avec plaisir que ça ne perturbe en aucune manière ni le fonctionnement de la caméra, ni la commande web de celle-ci. Je peux simultanément voir la vidéo transmise par le Pi et les mises à jour des relevés de température.
Sources
- https://www.framboise314.fr/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi/
- https://blog.bandinelli.net/index.php?post/2014/11/23/Temp%C3%A9rature-suivie-avec-un-Raspberry-Pi-B%2C-une-sonde-DS18B20-et-Munin
- https://blog.bandinelli.net/index.php?post/2013/10/13/Suivre-l-%C3%A9tat-de-son-serveur-avec-Munin
- https://wiki.archlinux.org/index.php/Munin
- http://guide.munin-monitoring.org/en/latest/reference/plugin.html
Bonjour Pascal,
Relever les températures est une chose mais quid des actions prises en cas d’écart constaté trop grand ou de temp absolue trop basse ?
Y a-t-il une chaufferette dans le nichoir ? Déplacez-vous les occupants pour les mettre à l’abri ?
Merci de nous donner, en plus de votre article très bien documenté techniquement, un peu de contexte humain (ou ornithologique !)
Raphaël
Bonjour Raphaël
En fait je n’ai jamais eu ce problème dans mes nichoirs et comme ce blog est plus centré sur le comment utiliser la Framboise j’en suis resté aux aspects « techniques ». Je pense que ce sont ceux-là qui peuvent être réutilisés, adaptés par d’autres bidouilleurs.
Maintenant pour répondre à votre question c’est ce bel article de lobo du forum 1bec2ailes
qui a piqué ma curiosité et m’a incité à connaître la température du nichoir avant de me lancer dans la réalisation. Puis j’ai eu envie de savoir quel écart de température les oiseaux arrivent à maintenir avec l’extérieur.
Ici et compte tenu de l’emplacement du nichoir c’est l’excès de chaleur qui est le plus à craindre. Dans ce cas, au printemps s’il y a une nichée, j’interposerai un écran pour protéger le nichoir du soleil.
Pascal
Sympa 🙂
Est-il possible d’avoir une photo du montage ?
Merci.
Le montage ressemble à celui-ci :
https://www.modmypi.com/blog/ds18b20-one-wire-digital-temperature-sensor-and-the-raspberry-pi
avec en plus 3 fils du cable de 12m fichés en parallèle sur la première sonde et à l’autre bout le composant soudé.
J’étais à la bougie avec mes retards accumulés, j’ai un bac STI Électrotechnique, votre site m’est arrivé motivant.
Bonsoir
Je suis très intéressé par votre article, car je cherche a faire la même chose pour une ruche. Par contre j’aimerai savoir comment vous êtes raccorder au Raspberry, comment vous alimentez, alors qu’il est, si j’ai bien compris auprès du nichoir.
Merci
Bonsoir
Merci pour votre intérêt.
Le raccordement au Raspberry est fait grace à un connecteur GPIO 40 broches. Les fils et la résistance sur soudés sur les bonnes broches comme sur la photo de François Mocq dans son article en référence 1. Dans mon cas il y a 2 fois les 3 fils puisque j’utilise 2 capteurs.
Effectivement le Raspberry est dans le nichoir. Il est raccordé au PC par un cable Ethernet de 30 mètres qui véhicule aussi son alimentation. J’ai décrit cela dans cet article :
https://www.framboise314.fr/une-webcam-pour-nichoir-a-base-de-raspberry-pi-2-pilotee-par-une-interface-web/
J’espère que vous y trouverez une idée applicable à votre ruche.
Cordialement
Bonjour,
Article très très intéressant et parfait pour mon projet 🙂
Petite question, peut-on ajouter autant de sondes que l’on veut ? Je ne compte pas en mettre des dizaines mais une petite quinzaine quand même. Autre chose, les sondes seront déportées à 2~3 mètres du RPi. Est-ce un problème ?
Merci d’avance pour vos lumières 😉
bonjour
des sondes de température 1 wire ? normalement pas de souci
cordialement
François
Bonjour,
Merci pour votre commentaire.
Je ne peux que confirmer la réponse de François : avec ce type de sonde 1 wire cela ne devrait pas poser de souci.
Pour la longueur j’ai testé à 12 mètres du Raspberry et cela fonctionne parfaitement.
Bonne réalisation.
Merci pour votre aide les amis 🙂
Pouvez-vous me confirmer que le composant DHT22 / AM2302 est bien du type 1-wire tel que j’ai cru le comprendre dans le datasheet ? Et accessoirement, quelqu’un a t-il déjà utilisé cette sonde (température + hygrométrie) ?
ps: Marrant & original le captcha 😉