Mesure de la température ambiante avec le Raspberry Pi
Par Dju » 26 janvier 2013 (19:50) - Raspberry Pi
Aujourd'hui un billet (que j'aurais du écrire depuis longtemps :p ) sur l'acquisition d'un thermomètre USB permettant de surveiller en temps réel la température ambiante.
Le tout avec le raspberry Pi et munin pour relever la température toutes les 5 minutes et ainsi avoir un joli graphe et voir l'évolution.
Ici, le pi tourne sous Raspbian, et grâce à un petit outil permettant de lire la température directement sur le thermomètre usb, disponible sur GitHub, on peut alors facilement surveiller. Le dit thermomètre USB peut se trouver facilement sur Ebay pour 12 euros. A ce prix la j'en ai pris 2
Par défaut, le thermomètre ne fonctionne que sous windobe a l'aide d'un programme fourni en DotNet.
Pour linux, un programme dont le source est librement fourni sur GitHub est disponible
Voici comment l'installer: on installe sur le pi le necessaire à la compilation, on recupere le programme, puis on le compile.
sudo aptitude install build-essential libusb-dev cd /opt wget https://github.com/peterfarsinsen/pcsensor/archive/master.zip unzip pcsensor-master.zip cd pcsensor-master make sudo make install
Le programme n'étant pas très gros, la compilation prend une 20aine de secondes.
A partir de la, si tout s'est bien passé, il il y a un binaire nommé pcsensor.
On peut désormais brancher le thermomètre, et vérifier avec la commande lsusb qu'il est bien reconnu :
lsusb Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 115: ID 0c45:7401 Microdia
ici c'est celui nommé Microdia avec l'id 0c45 7401.
On execute donc le binaire afin de voir si cela fonctionne bien :
./pcsensor 2013/01/26 19:09:57 Temperature (internal) 69.12F 20.62C Temperature (external) 214.60F 101.45C
la température ambiante est celle nommée "internal".
A partir d'une ligne de commande, on peut désormais avoir la température
./pcsensor -c | awk '/internal/ {print $NF}' | cut -dC -f1 20.62
Et a partir de la, scripter cette commande pour en faire ce que l'on veut
Par exemple, j'ai écrit un petit plugin Munin afin de la monitorer régulièrement (à télécharger ici)
Edit: Pour les inconditonnels du perl, on peut lire le thermometre avec Device::USB::PCSensor::HidTEMPer
Pour cela :
export LIBUSB_LIBDIR=/usr/lib/arm-linux-gnueabihf/ export LIBUSB_INCDIR=/usr/lib/arm-linux-gnueabihf/ perl -e shell -MCPAN install Extutils::MakeMaker install Inline::MakeMaker install Bundle::CPAN install Device::USB install Device::USB::PCSensor::HidTEMPer
Super info, envisages-tu de créer un genre de thermostat avec ton Rpi pour contrôler tes radiateurs?
salut
j'y ai pensé, en effet
l'idée serait de controller avec un simple interrupteur une prise, et a partir de la automatiquement allumer/éteindre le radiateur.
Pas forcémment utile l'été, mais bien pratique l'hiver quand y'a personne la journée
Pour continuer, hid_temper qui se trouve dans le dossier du serveur web mais impossible de le voir apparaître sur la page...
salut
normalement, afin d'installer un nouveau plugin pour munin, il faut 3 choses :
1/ mettre le fichier dans /usr/share/munin/plugins
2/ faire un lien symbolique dans /etc/munin/plugins, avec la commande
ln -s /usr/share/munin/plugins/hid_temper /etc/munin/plugins
3/ enfin, relancer munin :
/etc/init.d/munin-node restart
Et la ça devrait être bon
Accessoirement, avant de douter du plugin, obtiens tu la température avec la commande pcsensor ?
Bonjour,
Merci de la réponse. Au passage, je ne doute pas du plugin mais de mon installation ^^.
Oui j'ai bien la température avec la commande pcsensor.
Je ressaie cela ce soir mais j'ai pas réussi à voir le graphe malgré le fait que je pense avoir correctement suivi la procédure.
Je vérifierai bien et je recommencerai pour être certain mais je voyais bien la page (ou image) hid_temper dans le dossier du site (donc bien créé) mais impossible d'avoir le graphe.
Bonjour,
Merci pour ce post. Tout fonctionne parfaitement avec un capteur.
Par contre, comme toi, j'ai acheté 2 capteurs. Connais-tu un moyen de "sélectionner" le capteur qu'on veut lire? En branchant les 2, le programme n'affiche que les données du dernier capteur branché.
Voici ce que me donne lsusb :
Bus 002 Device 004: ID 0c45:7401 Microdia
Bus 002 Device 003: ID 0c45:7401 Microdia
Merci d'avance!
hello
ha ! la, j'avoue ne pas avoir pensé à cette situation :D
pour ma part, j'en ai 2, mais chacun branché sur une machine différente, dans une pièce différente.
Et en regardant le code source du programme (pcsensor.c), j'ai bien l'impression que le programme ne soit prévu pour, mais qu'il utilise le premier/dernier qu'il trouve
Ok merci pour ta réponse.
C'est ce que j'ai cru comprendre aussi en lisant le source rapidement. Mais je n'ai pas vraiment eu le temps de m'y attarder pour le moment ^^
Pour expliquer ma situation, je vais en brancher 2 sur mon raspberry : un pour mesurer la température du placard où il est (j'ai mon NAS et mon routeur au même endroit donc ça chauffe pas mal) et un pour mesurer la température de la pièce.
Bref j'étudierai ça dès que je trouve un peu de temps, et s'il faut je verrai pour patcher le programme. Je donnerai des nouvelles ici, ça peu peut-être intéresser du monde.
A+
Eventuellement, si ton routeur ou ton nas tourne sous linux et que tu as la main dessus, tu as la solution
Sinon la solution idéale serait en effet de patcher le code pour lui permettre de lire la température sur tous les devices adequat qu'il trouve ? mais je ne connais pas assez bien le C pour ça
J'y avais même pas pensé, mais c'est vrai que mon NAS tourne sous linux ^^
Du coup oui ça fonctionnerait je pense (c'est un linux "synology" mais j'ai à peu près la main dessus)...mais c'est tricher!
Je connais assez bien le C (même si j'suis pas trop sur linux quand je développe) du coup j'vais quand même voir si j'arrive à modifier le programme pour qu'il affiche la température de tous les devices qu'il trouve. Je sais juste pas quand j'aurai le temps de faire ça ^^
C'est re-moi!
Pas eu le temps de m'y remettre jusqu'à ce weekend, mais j'ai bien fait, ça m'a permis de tomber sur cette version : https://github.com/padelt/pcsensor-...
Et cette version a le bon gout de gérer plusieurs devices avec l'option -n :
-n[i] use device number i (0 is the first one found on the bus)
Voilà voilà!
Plus qu'à l'intégrer à mon munin, mais pour ça aucun problème
A+
hello.
ha, c'est cool ça. merci d'avoir trouvé de petit bijou, ça pourra certainement resservir
Bon...ben finalement encore un problème
Et là c'est un bug bien bien chelou : j'ai essayé plusieurs programmes semblables (celui dont tu donnes le lien, celui dont j'ai donné le lien un peu plus haut, et 2-3 autres) et à chaque fois j'ai ce comportement :
- le programme fonctionne parfaitement 15 fois
- la 16ème fois il plante avec le message suivant :
USB interrupt read: No such device
Fatal error> USB read failed
Lorsqu'il plante, j'ai les lignes suivantes dans /var/log/messages :
Nov 15 23:58:46 Thalion kernel: [13335.962385] usb 2-6: USB disconnect, address 32
Nov 15 23:58:46 Thalion kernel: [13336.576010] usb 2-6: new low speed USB device using ohci_hcd and address 33
Nov 15 23:58:46 Thalion kernel: [13336.789546] usb 2-6: configuration #1 chosen from 1 choice
Nov 15 23:58:46 Thalion kernel: [13336.799712] input: RDing TEMPer1V1.4 as /devices/pci0000:00/0000:00:0b.0/usb2/2-6/2-6:1.0/input/input193
Nov 15 23:58:46 Thalion kernel: [13336.799790] generic-usb 0003:0C45:7401.00DC: input,hidraw2: USB HID v1.10 Keyboard [RDing TEMPer1V1.4] on usb-0000:00:0b.0-6/input0
Nov 15 23:58:46 Thalion kernel: [13336.806668] generic-usb 0003:0C45:7401.00DD: hiddev97,hidraw3: USB HID v1.10 Device [RDing TEMPer1V1.4] on usb-0000:00:0b.0-6/input1
Et à chaque fois, il prend l'adresse libre suivante (adress 33 dans cet exemple, le prochain coup ça sera 34).
Ca pose 3 problèmes :
- ça rempli /var/log/messages avec plein de m**de
- ça fait des trous dans mon graphe munin puisque de temps en temps y'a pas de valeur (bon ça je pourrais le gérer avec un script qui va bien)
- de temps en temps ça inverse l'ordre de mes 2 capteurs sur le bus (selon comment ils se reconnectent) et du coup munin inverse le capteur "placard" et le capteur "pièce"
J'ai approfondi un peu mes tests, mais sans arriver à une explication. Avant de continuer je voulais savoir si tu avais eu un problème de ce genre?
J'ai essayé sur mon raspberry et sur mon ordi fixe. Sur mon raspberry je suis en Debian7.2 et mon ordi est en Ubuntu10.04LTS (oui, faudrait que je le mette à jour :D )
ha c'est drôle, ça. je constate aussi la meme chose. pas forcémment toutes les 15 fois, mais réguiièrement.
Meme symptôme (no such device) et meme pourrissage du syslog
Pour les graphes, ça faisait aussi un trou, donc j'avais rajouté dans le plugin une condition qui teste le retour (si $? != 0) pour relancer une fois et obtenir la température :p
Maintenant, pourquoi ça fait _ça aussi régulièrement.... mystère !
et ce quel que soit l'OS (mes 2 tournent sur un raspberry pi sous raspbian wheezy et un dockstar sous debian squeeze). meme probleme avec un ubuntu plus ou moins récent.
j'ai du lancer sudo make rules-install et non sudo make install
Merci pour le tuto en tout cas
Fil des commentaires de ce billet
URL de rétrolien : https://blog.crifo.org/trackback/94