Monitorer la temperature avec un Raspberry Pi, vite fait bien fait

L’hiver arrive, dans la nouvelle maison je souhaite surveiller la température temporairement pièce par pièce pour mesurer l’impact du chauffage.
Pour cela, je m’aide d’un Raspberry Pi en WIFI et d’une sonde 1-wire DS18B20.

Je ne vais pas réinventer le fil à couper le beurre, le schéma de câblage d’un DS18B20 est le même sur tous les blogs :

DS18B20 sur raspberry pi

DS18B20 sur raspberry pi

 

Ce qui donne une fois soudé :

Magnifique tapis de souris

Magnifique tapis de souris

Vite fait bien fait on a dit

Vite fait bien fait on a dit

Avec des pins !

Avec des pins ! Luxe !

J’utilise une résistance de 4.2kΩ qui fait très bien l’affaire.

Coté Raspberry Pi, après la configuration du WIFI, place à la configuration du 1-wire.

# vi /etc/modules
w1-therm
w1-gpio pullup=1
snd-bcm2835

Pour une action immédiate :

# modprobe w1-therm
# modprobe w1-gpio pullup=1

Puis allons voir ce qu’il se passe  du coté du bus 1-wire :

# cd /sys/bus/w1/devices
# ls -l
total 0
lrwxrwxrwx 1 root root 0 nov. 18 00:05 28-000003977b0a -> ../../../devices/w1_bus_master1/28-000003977b0a
lrwxrwxrwx 1 root root 0 nov. 17 22:45 w1_bus_master1 -> ../../../devices/w1_bus_master1

Ah ! 28 machins, ça me rappelle des souvenirs.

# cd 28-000003977b0a
# cat w1_slave
63 01 4b 46 7f ff 0d 10 15 : crc=15 YES
63 01 4b 46 7f ff 0d 10 15 t=22187

Bon, on devine que 22187 correspond à 22,187°C.
Autrement on peut utiliser cette commande :

# find /sys/bus/w1/devices/ -name "28-*" -exec cat {}/w1_slave \; | grep "t=" | awk -F "t=" '{print $2/1000}'
22.187

Voila voila…

Reste à grapher périodiquement cette valeur.
Vite fait, bien fait, j’aime grapher avec munin et j’ai vite trouvé un script simple et efficace :
https://gist.github.com/kminiatures/4f3…

Ah bah !?! Go !

# apt-get install -y munin-node bc
# cd /etc/munin/plugins/

Personnellement, je souhaite juste ma temperature, donc je supprime tous les plugins et crée le nouveau plugin :

# rm *
# vi 1w-temp

Pour y insérer ceci (selon https://gist.github.com/kminiatures/4f3… )

#!/bin/sh

case $1 in
   config)
        cat <<'EOM'
graph_title Temperature
graph_vlabel Temperature
temperature.label temperature
EOM
        exit 0;;
esac

printf "temperature.value "
TEMP=`cat /sys/bus/w1/devices/*/w1_slave | grep t= | sed s/.*t=//`
echo "scale=2; $TEMP / 1000" | bc

Puis on teste tout de suite notre plugin :

# chmod +x 1w-temp
# munin-run 1w-temp
temperature.value 22.25

Bientôt la fin… J’ajoute un « allow * » au fichier /etc/munin/munin-node.conf
Puis /etc/init.d/munin-node restart

Mettons un serveur munin/apache2 en place :

# apt-get install munin apache2
# vi /etc/apache2/conf.d/munin

Puis remplaçer toutes les occurences de Allow from localhost 127.0.0.0/8 ::1 par Allow from all .
On redémarre apache2 :

# /etc/init.d/apache2 restart

Vous pouvez également modifier le fichier /etc/munin/munin.conf pour modifier le nom de votre serveur.

Evidemment, si vous avez un autre serveur munin (mon cas), inutile d’installer un serveur munin sur votre Raspberry, il vaut mieux décharger cette tâche à une autre machine plus apte à ce genre de service.
Au bout de quelques heures ou quelques jours, vous devriez voir ce genre de graphique :

DS18b20 dans munin

DS18b20 dans munin

DS18b20 zoomé dans munin

DS18b20 zoomé dans munin

Bon, vite fait, maintenant qu’on a un apache2 sur le raspberry, une petite page PHP pour connaitre la température actuelle de la sonde.
On peut aussi lire la valeur « Cur: » sur les graphs munin, mais mes petits yeux veulent quelque chose de plus grand, surtout depuis le téléphone.

# apt-get install php5
# cd /var/www/
# vi index.php
<meta name="viewport" content="width=device-width, user-scalable=no">
<center><span style="font-size:65px;">
<?php
// Fichier à lire
$file = "/sys/bus/w1/devices/28-000003977b0a/w1_slave";

// Lecture ligne par ligne
$lines = file($file);

// Recupere la 2nd ligne
$temp = explode('=', $lines[1]);

// Formatage de la temperature
$temp = number_format($temp[1]/1000,2, '.', '');

// On affiche la temperature
echo $temp;
?>
</center></span>

28-000003977b0a correspond à l’ID de ma sonde DS18B20.

Ce qui donne sur smartphone :

page web DS18b20

page web DS18b20

Voila, un article vite fait bien fait, pour surveiller une température.
Cela va me permettre dans un premier temps de calibrer mon Z41.
Puis ça me permettra d’analyser les variations de température de la maison entre le chauffage au sol, le poêle à pellet, et l’ensoleillement à travers les ouvertures.

Ce billet est posté dans 1-wire, graphs, php, Raspberry Pi, Web et taggé , , , , . Mettre en favoris le permalien.

19 réponses à Monitorer la temperature avec un Raspberry Pi, vite fait bien fait

  1. le r. naturel says:

    Merci à toi pour le partage, je dit simplement bravo

  2. mickael says:

    Bonjour,

    Je suis novice et je suis en train de réaliser le montage et je butte sur quelques points:
    Lorsque j’écris le plugins, il ne s’enregistre pas, de plus, je ne sais pas à quel moment je dois écrire les lignes suivantes:
    # rm *
    # vi 1w-temp

    merci de m’aider,

    Cordialement,

    • Lionel says:

      Salut,

      Alors il te faut l’editeur vim (apt-get install vim)
      Ensuite, pour ecrire une le plugin munin :
      cd /etc/munin/plugins/
      et on supprime les plugins actuels, à moins que tu veille surveiller le CPU, la mémoire, l’espace disque etc…
      rm *
      donc le rm * permet de supprimer les plugins situé dans /etc/munin/plugins/
      Ensuite, il faut crée le fichier 1w-temp
      Pour cela on utilise vim (vi).
      vi 1w-temp
      La touch « i » permet de passer en mode insertion, ainsi tu peux copier/coller le texte
      Ensuite tu fais la touche « ESC » pour quitter le mode insertion, puis tu tappes :wq pour écrire et quitter vim.
      Après tu rends le fichier executable : (chmod +x 1w-temp) et tu restart munin : /etc/init.d/munin-node restart

      Voila, en esperant que ça te permette de passer cette étape où tu bloques.

  3. mickael says:

    Bonsoir Lionel,

    Ton aide m’a été précieuse puis que j’en suis arrivé à l’étape « temperature.value », mais je ne comprends pas qu’est ce que c’est l’étape allow* ???

    merci de m’aider encore une fois.

    Cdlt,

    • Lionel says:

      Salut,

      Le « allow * » permet d’autoriser un serveur munin à se connecter au munin-node (le raspberry), c’est dans le cas où tu as déjà un serveur munin chez toi (car c’est un outil classique de monitoring système)
      Donc cette étape n’est pas obligatoire.

  4. GearPower says:

    C’est super!! Ca semble bien marcher pour une sonde, par contre, j’ai 10 sondes DS18B20, le plugin lw-temp actuel ne fonctionne pas dans mon cas. Est-ce que c’est bien compliqué à modifier? Qu’est-ce que je dois modifier?

  5. david says:

    salut, bravo pour se tuto..
    je suis en train de confectionner un ensemble pour gerer un batterie d’aquarium…
    j’ai un petit probleme avec cette etape:
    je ne trouve pas vi /etc/apache2/conf.d/munin

    j’ai pourtant suivi le reste sans probleme quand je lance munin-run, j’ai bien la temperature qui s’affiche..

    Pour completer ton tuto tu devrais ajouter la partie, comment se connecter a l’interface graphique car tu n’en parle pas…

    merci d’avance si tu pouvais m’eclairer la dessus

    • Lionel says:

      Salut,
      Merci pour le feedback.
      Alors pour la commande vi /etc/apache2/conf.d/munin, il te faut 3 choses :
      – vi : apt-get install vim
      – apache2 : apt-get install apache2
      – munin-node : apt-get install munin-node

      C’est noté pour l’interface graphique, mais c’est très rébarbatif de traiter à chaque tuto, comment on se connecte en SSH, comment on lance PuTTy, comment on installe le Raspberry, etc…
      Car au final pour un petit tuto qui apporte un petit plus avec une sonde de température, j’ai 25% de bla bla sur l’installation du raspberry, 20% sur les bases à connaitre, 15% sur les paquets de bases à installer, pour terminer avec seulement 40% de « neuf » avec cette sonde de température.
      Du coup, je pense que les lecteurs qui veulent s’aventurer sur cette petite sonde de température, auront trouvé les bases sur d’autres sites/tutoriels, ce qui permet ici de reste 100% dans le sujet.

  6. david says:

    Merci lionel,

    Je regarderai ca se soir..

    Je sais me connecter, il y a plusieur solution:
    avec localhost en local ca devrait fonctionner:
    j’ai vu aussi une ip trainer dans un fichier de conf de munin…

    perso j’utiliserai plus une interface du style vnc ou teamviwer pour me connecter au raspberry pi…

    meme si le terminal me pose pas trop de probleme, je l’utilise regulierement…

    – vi : apt-get install vim >> installation OK
    – apache2 : apt-get install apache2 >> j’ai fais comme dans le tuto apt-get install munin apache2 >> c’est peu etre la l’erreur
    – munin-node : apt-get install munin-node >> apt-get install -y munin-node bc >> peu etre une difference entre les deux aussi >> puis j’ai fais un rm * comme dans le tuto pour supprimer les fichiers puis la création de « vi 1w-temp »…

    cela fait une semaine presque que ca tourne je jeterai un coup d’oeil se soir, comme tu la dis cela peu mettre plus heure ou jour avant d’avoir un graph..

    merci, pour ses conseil je comprend que repéter les meme choses, c’est rebervatif

    a+
    david

  7. Aurelien says:

    Bonjour,
    J’ai en principe suivi toutes les étapes scrupuleusement, l’affiche bien la température sur une page web, mais je n’arrive pas à voir les graphes par le port 4949, où aurais-je failli??
    Merci!! (très chouette tuto!)
    Aurélen

  8. Cédric says:

    Bonjour à tous,

    mon problème est que quand je veux lancer le 1w-temp il me dit que c’est un service inconnu, pouvez-vous m’aider ?

  9. Bruno says:

    Excellent, très clair ! Ca fonctionne parfaitement chez moi

    Un grand merci…

  10. tofe02 says:

    bonjour
    je bloque a cette etape
    Puis remplaçer toutes les occurences de Allow from localhost 127.0.0.0/8 ::1 par Allow from all .
    Je comprend pas ce que je dois faire
    merci

  11. tofe02 says:

    bonjour si on a plusieurs sondes peut on les lire tous?
    merci

  12. abdou says:

    ça marche super

  13. madmax says:

    Bonjour

    Merci pour le tuto

    pour les noobies comme moi 🙂

    Bc à la fin du bash n’est pas natif sous raspian

    donc ==> apt-get install bash bc

  14. Théo Dunion says:

    Bonjour,
    Le sujet commence à dater mais il n’en demeure pas moins intéressant, j’ai donc suivi toutes les étapes de ce tutoriel et tout a fonctionné pour le mieux jusqu’à l’édition du fichier : « /etc/apache2/conf.d/munin », tout simplement introuvable, le répertoire conf.d n’existe pas … Je suis donc un peu perdu, et lorsque je veux accéder à munin sur mon site web, c’est à dire exemple.net/munin , je tombes sur une erreur de type « Forbidden ».
    Pourriez-vous me venir en aide car autrement la sonde, le script etc fonctionnent très bien 🙂 Merci d’avance pour votre aide !

  15. skit says:

    bonjour,

    J’aimerais savoir comment modifier le lien du fichier index.html car il va me chercher celui de base d’apache (dans /var/www) et non celui de Munin. (/var/www/munin)

    Merci d’avance !

Laisser un commentaire

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