lint-all #3
					 1 changed files with 22 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -13,35 +13,41 @@ Je me suis beaucoup inspiré du site [framboise314][1], avec un ajout de configu
 | 
			
		|||
[TOC]
 | 
			
		||||
 | 
			
		||||
# Matériel
 | 
			
		||||
 | 
			
		||||
- une sonde DS18B20
 | 
			
		||||
- une nappe IDE (40 fils) pour se brancher sur le port GPIO de la raspi
 | 
			
		||||
- une [raspberry pi][4]
 | 
			
		||||
 | 
			
		||||
## Images
 | 
			
		||||
 | 
			
		||||
Le montage est très bien décrit sur le site de [framboise314][1], je ne le décrirais donc pas à nouveau.
 | 
			
		||||
J'ai choisi la version "standard" à 3 fils.
 | 
			
		||||
 | 
			
		||||
Voici une image de la raspi : [][5]  
 | 
			
		||||
Voici une image de la raspi : [][5]
 | 
			
		||||
et une de la breadboard : [][6]
 | 
			
		||||
et une sans la breadboard : [][7]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Logiciel
 | 
			
		||||
 | 
			
		||||
## Ajout de l'overlay (3.18+)
 | 
			
		||||
 | 
			
		||||
Dans le fichier `/boot/config.txt`, il faut ajouter le chargement d'un overlay pour le DTB. J'en parle très succintement [ici][2] avec un lien vers [devicetree.org][3], c'est une description du matériel qui permet au noyau d'activer et de configurer certaines parties de la carte.
 | 
			
		||||
Il me semble qu'avant le 3.18 cette description était statique pour la raspi.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
dtoverlay=w1-gpio
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Une version `-pullup` est aussi disponible, mais n'est nécessaire que si on branche le capteur en mode parasite (la version 2 fils, en reliant la patte d'alimentation avec la patte data)
 | 
			
		||||
 | 
			
		||||
Ensuite dans `/etc/modules`, on rajoute le chargement des pilotes 1-wire :
 | 
			
		||||
```
 | 
			
		||||
w1-gpio 
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
w1-gpio
 | 
			
		||||
w1-therm
 | 
			
		||||
```
 | 
			
		||||
Comme pour la DTB, je n'ai pas activé l'option `pullup=1`. 
 | 
			
		||||
 | 
			
		||||
Comme pour la DTB, je n'ai pas activé l'option `pullup=1`.
 | 
			
		||||
 | 
			
		||||
# Lecture de la valeur
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -49,33 +55,38 @@ Si le dispositif fonctionne bien et que les pilotes sont chargés, un fichier es
 | 
			
		|||
 | 
			
		||||
En lisant ce fichier, on obtient sur le CRC de la lecture sur la première ligne qui permet de déterminer si la lecture de la valeur et sa transmission au pilote a fonctionné.
 | 
			
		||||
Voici un exemple d'une sortie en erreur :
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```console
 | 
			
		||||
cat : /sys/bus/w1/devices/28-001451521dff
 | 
			
		||||
00 00 00 00 00 00 00 00 00 : crc=00 NO
 | 
			
		||||
00 00 00 00 00 00 00 00 00 t=0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
On retrouve alors dans les logs un message :
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```console
 | 
			
		||||
w1_slave_driver 28-001451521dff: Read failed CRC check
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
J'utilisais alors une nappe IDE de longueur classique, environ 60 cm, cela semble être trop.
 | 
			
		||||
 | 
			
		||||
En utilisant une nappe plus courte (5cm, je ne sais plus du tout dans quelle machine j'ai récupéré ça), j'ai obtenu une sortie correcte :
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```console
 | 
			
		||||
78 01 55 00 7f ff 0c 10 57 : crc=57 YES
 | 
			
		||||
78 01 55 00 7f ff 0c 10 57 t=23500
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
La deuxième ligne donne la température en millième de °C.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Plugin collectd
 | 
			
		||||
 | 
			
		||||
Dans un premier temps, je vais utiliser un script shell et le plugin [Exec][8] de collectd. J'essaierai de faire une meilleure version du plugin, en C je suppose, plus tard.
 | 
			
		||||
 | 
			
		||||
## En utilisant le plugin exec
 | 
			
		||||
 | 
			
		||||
Voici un exemple de script donné sur la page [wiki du plugin][7], adaptée pour ce capteur :
 | 
			
		||||
 | 
			
		||||
``` bash
 | 
			
		||||
 #!/bin/bash
 | 
			
		||||
 # script to read DS18B20 temp value and output in collectd format
 | 
			
		||||
| 
						 | 
				
			
			@ -95,10 +106,10 @@ Voici un exemple de script donné sur la page [wiki du plugin][7], adaptée pour
 | 
			
		|||
    value=$(awk -F "t=" '/t=/ {print $2/1000}' ${probe_path})
 | 
			
		||||
    echo "PUTVAL \"${HOSTNAME}/exec-temp/gauge-DS18B20\" interval=${INTERVAL} N:${value}"
 | 
			
		||||
 done
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Voici la configuration du plugin dans le fichier `collectd.conf`. Notez l'id de la sonde en paramètre du plugin, il sera passé au script de lecture.
 | 
			
		||||
 | 
			
		||||
``` bash
 | 
			
		||||
<Plugin exec>
 | 
			
		||||
  Exec "pi" "/home/pi/read_temp.sh" "28-001451521dff"
 | 
			
		||||
		Loading…
	
		Reference in a new issue