Relever et grapher la température de sa maison sur Debian

Depuis que j'ai mis en place mon serveur perso, dans mon salon, je graphe pas mal de choses grâce à Munin. Par exemple, la température de 2 villes (voir sur mon article de présentation). Je voulais, depuis longtemps, grapher la température à l'intérieur de mon appart (pour pas cher, bien évidemment). C'est désormais chose faite pour moins de 6€. Voici ce que j'ai fait (j'ai fait les manips sur mon serveur perso, une Debian, tout est donc identique pour le faire sur une Ubuntu ou un Raspberry Pi).

thermo.png

I. Le matériel

Après quelques recherches, j'ai trouvé le thermomètre USB TEMPer. Les prix peuvent varier entre 5 et 20€, je pense avoir trouvé le moins cher sur ebay, pour 5,37€ frais de ports gratuits. Je passe donc commande et je reçois le joujou 2 semaines plus tard.

temper.jpg

II. Les logiciels

Une fois reçu le thermomètre, je le branche sur le port USB de mon serveur. Voici le résultat de la commande dmesg (ou dans /var/log/messages) :

kernel: [4850586.280542] usb 2-1: new low speed USB device using uhci_hcd and address 4
kernel: [4850586.455191] usb 2-1: New USB device found, idVendor=0c45, idProduct=7401
kernel: [4850586.455200] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
kernel: [4850586.455207] usb 2-1: Product: TEMPerV1.4
kernel: [4850586.455211] usb 2-1: Manufacturer: RDing
kernel: [4850586.455421] usb 2-1: configuration #1 chosen from 1 choice
kernel: [4850586.474046] input: RDing TEMPerV1.4 as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/input/input11
kernel: [4850586.474331] generic-usb 0003:0C45:7401.0007: input,hidraw0: USB HID v1.10 Keyboard [RDing TEMPerV1.4] on usb-0000:00:1d.0-1/input0
kernel: [4850586.489026] generic-usb 0003:0C45:7401.0008: hiddev0,hidraw1: USB HID v1.10 Device [RDing TEMPerV1.4] on usb-0000:00:1d.0-1/input1

Et le résultat de la commande lsusb :

Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 004: ID 0c45:7401 Microdia
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 046d:0992 Logitech, Inc. QuickCam Communicate Deluxe
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Le TEMPer c'est la ligne "0c45:7404 Microdia". En tapant cette recherche dans votre moteur de recherche, vous tombez sur pas mal de docs. J'ai donc dû installer le binaire me permettant de relever la température. J'ai choisi temperv14 de dev-random.net.

Voici le détail les commandes :

sudo su
apt-get install libusb-dev libusb-1.0-0-dev unzip
cd /tmp/
wget http://dev-random.net/wp-content/uploads/2013/08/temperv14.zip
#ou un miroir
wget http://www.generation-linux.fr/public/juin14/temperv14.zip
unzip temperv14.zip
cd temperv14/
make


Si tout se passe correctement, vous obtenez un binaire temperv14 (dans le répertoire dans lequel vous vous trouvez, ici, /tmp/temperv14). Il ne reste plus qu'à le déplacer dans /usr/local/bin/ :

mv temperv14 /usr/local/bin

Vous pouvez désormais utiliser la commande suivante pour obtenir la température via le TEMPer :
temperv14 -c 

Une dernière chose, dans l'état, le binaire temperv14 n'est utilisable que par l'utilisateur root. Comme je compte grapher ces valeurs dans munin, il faut faire en sorte que tout le monde (dont l'utilisateur munin) puisse exécuter cette commande. Je lance donc cette commande :

chmod +s /usr/local/bin/temperv14

III. Monitoring dans munin

Voici le code que j'ai utilisé dans munin et le rendu obtenu :

Le code

#!/bin/sh
# Where is pcsensor located?
PCSENSOR="/usr/local/bin/temperv14"

if [ ! -e ${PCSENSOR} ]; then
        echo "Cannot find pcsensor executable" >&2
        exit -1
fi

case $1 in
   config)
        echo "graph_title Temperature Appart
graph_vlabel Celsius
graph_info Graph la temperature de mon appart avec temperv14
graph_category sensors
graph_args --base 1000 -l 0
graph_vlabel temp in C
temp.label temp"
        exit 0;;
esac

echo -n "temp.value "
${PCSENSOR} -c

Le rendu

temp_appart-day.png

Voila, c'est pas plus compliqué :)

Vus : 770
Publié par Génération Linux : 126