Tag Archives: ds18b20
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 :
Ce qui donne une fois soudé :
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.
w1-therm
w1-gpio pullup=1
snd-bcm2835
Pour une action immédiate :
# modprobe w1-gpio pullup=1
Puis allons voir ce qu’il se passe du coté du bus 1-wire :
# 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.
# 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 :
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 !
# cd /etc/munin/plugins/
Personnellement, je souhaite juste ma temperature, donc je supprime tous les plugins et crée le nouveau plugin :
# 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 :
# 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 :
# 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 :
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 :
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.
# 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 :
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.