Publié le 14 novembre 2016 - par

Suivre la température d’un nichoir : Un Raspberry Pi et deux sondes DS18B20

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

NIVEAU_debutant

Cliquer pour lire la définition des niveaux

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

cablage_600px

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 :

Courbe de température obtenue avec 2 sondes

Cliquer pour agrandir

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

  1. https://www.framboise314.fr/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi/
  2. 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
  3. https://blog.bandinelli.net/index.php?post/2013/10/13/Suivre-l-%C3%A9tat-de-son-serveur-avec-Munin
  4. https://wiki.archlinux.org/index.php/Munin
  5. http://guide.munin-monitoring.org/en/latest/reference/plugin.html

11 réflexions au sujet de « Suivre la température d’un nichoir : Un Raspberry Pi et deux sondes DS18B20 »

  1. Raphaël

    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

    Répondre
    1. pascal- bozo31 Auteur de l’article

      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

      http://1bec2ailes.forumparfait.com/nichoir-chauffa-ou-refroidi-vt884.html

      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

      Répondre
  2. Georges Gagliano

    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

    Répondre
    1. pascal- bozo31 Auteur de l’article

      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

      Répondre
  3. RookieElec

    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 😉

    Répondre
    1. pascal-bozo31

      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.

      Répondre
  4. RookieElec

    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 😉

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.