La Lanterne Rouge

La Lanterne Rouge

Warning: Geek Inside

Publié le par Nanawel
Publié dans : #munin | #capteur | #usb | #linux | #thermometre | #monitoring

Le contexte

Je surveille étroitement la température des différents capteurs présents sur les machines de mon cheptel, et l'été est toujours une période à risque car la température monte chez moi parfois au-dessus des 30°C là où se trouvent mon serveur et mon NAS. J'utilise pour cela les rapport fournis par Monitorix et Munin qui produisent chacun de jolies courbes d'historisation.

Si les températures relevées via ces capteurs sont globalement proportionnelles à celles régnant dans la pièce (ou le placard !) dans laquelle les machines se trouvent, il s'agit néanmoins de la température des composants. Je souhaitais en plus pouvoir consulter et historiser facilement la température de la pièce elle-même.

Pour la consultation en temps-réel et sur place, le problème n'en est pas pas un : il suffit d'acheter un thermomètre !

Pour la consultation en temps-réel mais à distance, on pourrait imaginer de filmer le même thermomètre avec une webcam. D'accord ça commence à être tordu.

Pour la consultation différée sur place ou à distance, il n'y a pas vraiment de solution sans automatisation.

Je me suis donc mis à la recherche d'un thermomètre USB. Je me doutais qu'un gadget de ce type devait se trouver facilement à 10€ sur Amazon.

En réalité, oui et non. Il existe en effet des sondes de température que l'on peut brancher sur le port USB, sur Amazon et eBay, mais aucune n'est à 10€ et celles qui s'approchent le plus de ce tarif ont des commentaires bien souvent assassins. En cause : la qualité de fabrication principalement, entraînant des mesures très peu précises.

 

Surveillez la température de votre placard

J'ai cherché longtemps d'autres modèles de meilleure qualité, mais je tombais finalement toujours sur des sites d'équipements professionnels, dont les prix étaient tout sauf accessibles. Il manquait un juste milieu.

Puis, suite à la lecture d'un commentaire sur un forum je crois, j'ai découvert la boutique de Dracal Technologies, une (apparemment) petite société canadienne qui produit des capteurs en tout genre, à des tarifs plus raisonnables. Le thermomètre USB simple "USBTenki" est au prix de $29.99. Une fois la conversion effectuée et les frais de livraison ajoutés, on tombe à environ 29,00€. J'ai failli craquer pour le modèle relevant température, humidité et pression atmosphérique mais je me suis ravisé :)

Un point amusant et intéressant au passage, la plupart de ces appareils sont basés sur des montages dont les plans sont librement accessibles :

http://www.raphnet.net/electronique/usbtenki/index_en.php

Le matériel

Le capteur reçu est en tout point conforme à la description et aux photos sur la fiche produit. On sent clairement qu'il s'agit de petits circuits imprimés et petits composants cachés sous des gaines de plastique, mais l'ensemble est très propre et ne semble pas particulièrement fragile.

Il y a d'ailleurs deux portions de gaines rigides différentes : une au milieu du câble, d'une dizaine de centimètres - contenant j'imagine l'électronique de conversion - et une en bout, contenant le capteur même. Le reste du câble (mesurant environ 1m au total) est flexible et peut donc être facilement manipulé de manière à placer précisément la sonde.

Surveillez la température de votre placard

Une fois le capteur branché, j'ai pu constater qu'il était bien détecté :

# lsusb
[...]
Bus 006 Device 003: ID 1781:0a98 Multiple Vendors

L'ID 1781:0a98 correspond bien au capteur  : 1781 est l'identifiant du constructeur (ou "Vendor ID", ici c'est un ID générique : "Multiple Vendors"), et 0a98 celui du modèle ("Product ID").

 

Le logiciel

Cette sonde - ainsi qu'apparemment toutes celles vendues par Dracal - peut être contrôlée depuis Windows, Mac et Linux. Un excellent point car chez moi c'est à Usul - tournant sous Debian Wheezy - qu'elle va être branchée. Une petite page est même dédiée au manchot et détaille les opérations nécessaires pour compiler les binaires qui vont lire les valeurs des capteurs. Il suffit de se placer dans le dossier client après avoir décompressé l'archive, un petit make et voilà les binaires compilés (quand on a installé les packages build-essential et libusb-dev évidemment).

Deux binaires sont générés : usbtenkiget et usbtenkisetup. Le second permet apparemment de calibrer la sonde, mais je ne l'ai pas utilisé.

Si le capteur est branché, il doit être possible de lire la valeur directement. Il faut par contre le faire en tant que root ou que l'utilisateur courant fasse partie du groupe plugdev, autrement le message "No device found" s'affiche.

# ./usbtenkiget
24.19

Concis et efficace !

La précision de la valeur retournée est à la deuxième décimale, mais d'après la fiche produit la précision réelle est estimée à ±0,5°C à 25°C. D'après mes tests, je pense que celle-ci est légèrement meilleure que celle annoncée.

Il est évidemment possible d'utiliser des options pour lister les différents capteurs disponibles, changer l'unité (F° ou K°), le format de sortie et bien d'autres choses.

# ./usbtenkiget -p -T Kelvin -i 0
Temperature: 297.09 °K

Le paramètre -i permet de sélectionner le capteur à interroger. Pratique si on en a plusieurs, ici il est facultatif, ce qui renvoie par défaut la valeur du capteur 0.

Pour lister les capteurs disponibles avec leurs ID, utiliser le flag -l :

# usbtenkiget -l
Found: 'USBTenki', Serial: '??????', Version 2.0, Channels: 9
    Channel 0: MCP980x I2C Temperature sensor [Temperature]

 

Afin de pouvoir appeler cette commande depuis n'importe quel dossier, j'ai évidemment copié le binaire dans le dossier /usr/local/bin.

Plugin Munin

Pouvoir récupérer la température sur demande c'est bien, mais automatiser cette lecture et l'historiser, c'est mieux. Pour cela j'ai créé un petit plugin très simple pour Munin.

Sauf que si je tente d'interroger le capteur en tant que munin, le résultat n'est pas ce qu'on pourrait appeler un flottant crédible :

# su -l munin -s /bin/bash -c usbtenkiget
No device found

La commande munin-node - exécutée toutes les 5 minutes et chargée de récolter les valeurs des différents plugins actifs - tourne en effet avec les droits de l'utilisateur munin, qui sont très restreints. On pourrait ajouter cet utilisateur au groupe plugdev, ou... utiliser un peu de la magie des permissions UNIX pour autoriser l'utilisation du binaire usbtenkiget par tout utilisateur.

Je vais pour ma part utiliser la seconde option car j'aurai besoin dans un second temps qu'une application Web (donc  l'utilisateur www-data) puisse elle aussi aller lire la valeur du capteur. Si munin pourrait à la rigueur être membre du groupe plugdev, il est par contre hors de question que www-data le soit. Faut pas déconner.

 

EDIT 20/08/2014 : Il est aussi possible concernant le plugin Munin de préciser l'utilisateur et/ou le groupe à utiliser lors de son exécution.

 

Pour cela nul besoin de baguette magique, juste d'un petit terminal. Il suffit de changer le groupe du fichier et de positionner le bit SGID :

# chgrp plugdev /usr/local/bin/usbtenkiget
# chmod g+s /usr/local/bin/usbtenkiget
# ls -l /usr/local/bin/usbtenkiget
-rwxr-sr-x 1 root plugdev 129704 juil. 10 22:16 /usr/local/bin/usbtenkiget

Et pour vérifier que munin peut à présent bien relever la température :

# su -l munin -s /bin/sh -c usbtenkiget
21.31

(NdA : tiens, il fait plus frais que quand j'ai écrit le paragraphe précédent ^^)

On peut à présent installer le plugin ci-dessous dans le dossier /usr/share/munin/plugins. Je l'ai appelé tenkitemp_ et me suis basé sur un plugin utilisé à la base pour monitorer la température de mon Raspberry Pi, auquel j'ai ajouté la possibilité de préciser l'ID du capteur. On crée ensuite un lien dans le dossier /etc/munin/plugins qu'on nomme tenkitemp_0 (car on va relever la valeur du capteur à l'ID 0).

# ln -s /usr/share/munin/plugins/tenkitemp_ /etc/munin/plugins/tenkitemp_0

Les valeurs WARN et CRIT sont purement arbitraires. Comme je l'ai dit plus haut, chez moi 30°C est une température facilement atteignable en été, mais qui est clairement élevée. Par contre à 38°C on peut se demander si je n'ai pas oublié un chiffon imbibé d'essence dans le four allumé...

Une fois le plugin installé, n'oubliez pas de recharger la configuration du daemon munin-node :

# /etc/init.d/munin-node restart

 

Après quelques jours, on peut observer de jolies courbes dans la catégorie "sensors" de Munin :

Non ce n'est pas une erreur, la température varie *vraiment* autant...

Non ce n'est pas une erreur, la température varie *vraiment* autant...

Commenter cet article