Voici une bidouille permettant de relever la température et l’hygrométrie de sondes AM2302 (précâblé) ou DHT22 à partir d’un Raspberry Pi, et de les compiler dans un graphique Munin.
MàJ 04/2019: pour extraire Température et Humidité en une seule commande sed, sur un appel à AdaFruitDHT.py:
Température
/opt/am2302/AdafruitDHT.py 2302 22 | sed -e 's/\(^.*p=\)\(.*\)\(\*.*$\)/\2/'
21.2
Humidité
/opt/am2302/AdafruitDHT.py 2302 22 | sed -e 's/\(^.*y=\)\(.*\)\(\%.*$\)/\2/'
51.8
Dans cette bidouille, le Raspberry Pi est un modèle A. Il sera équipé de 3 sondes sur le port GPIO:
- 2 sondes intérieures alimentés en 3.3v sur les PIN22 et 23
- 1 sonde extérieure alimentée en 5v sur le PIN24
Selon les spécifications, au delà d’1 mètre de câble (et jusqu’à maximum 30 mètres) , ces sondes nécessitent 5,5v autrement les valeurs seront erronées.
Installation sur Raspbian 9
Installation des paquets pip necessaires:
sudo apt-get install python-pip
sudo python -m pip install --upgrade pip setuptools wheel
sudo pip install Adafruit_DHT
Pour interroger les sondes, un petit script python est a récupérer à partir du Github d’Adafruit:
https://github.com/adafruit/Adafruit_Python_DHT/blob/master/examples/AdafruitDHT.py
Commençons par créer le dossier de travail, et le script Python:
mkdir /opt/am2302
cd /opt/am2302
wget https://github.com/adafruit/Adafruit_Python_DHT/blob/master/examples/AdafruitDHT.py
Tests
Pour tester le bon fonctionnement des sondes:
python /opt/am2302/AdafruitDHT.py 2302 24
python /opt/am2302/AdafruitDHT.py 2302 23
python /opt/am2302/AdafruitDHT.py 2302 22
Le résultat doit ressembler à ça:
Temp=11.5* Humidity=58.8%
Scripts Munin
On peut ensuite créer le premier script Munin pour le PIN24:
nano /opt/am2302/am2302_01_pin24
#!/bin/bash
query_01=$(python /opt/am2302/AdafruitDHT.py 2302 24)
temperature_01=$(echo ${query_01} | sed -e 's/Temp=\(.*\)Humidity.*/\1/' | sed 's/*//g')
humidity_01=$(echo ${query_01} | sed 's/.*Humidity=//' | sed 's/%//g')
if [ "$1" = "config" ]; then
echo "graph_title Sonde 01"
echo "graph_args --base 1000 -A -Y"
echo "graph_category sensors"
echo "temperature.label Temperature"
echo "temperature.draw LINE1"
echo "temperature.colour FF8000"
echo "temperature.warning 5:25"
echo "temperature.critical 0:28"
echo "humidity.label Humidity"
echo "humidity.draw LINE2"
echo "humidity.colour FF00FF"
echo "humidity.warning 80"
echo "humidity.critical 90"
exit 0
fi
echo "temperature.value ${temperature_01}"
echo "humidity.value ${humidity_01}"
Les valeurs « warning » et « critical » sont personnalisées pour une sonde extérieure.
Sur le même principe pour le PIN23:
nano /opt/am2302/am2302_02_pin23
#!/bin/bash
query_02=$(python /opt/am2302/AdafruitDHT.py 2302 23)
temperature_02=$(echo ${query_02} | sed -e 's/Temp=\(.*\)Humidity.*/\1/' | sed 's/*//g')
humidity_02=$(echo ${query_02} | sed 's/.*Humidity=//' | sed 's/%//g')
if [ "$1" = "config" ]; then
echo "graph_title Sonde 02"
echo "graph_args --base 1000 -A -Y"
echo "graph_category sensors"
echo "temperature.label Temperature"
echo "temperature.draw LINE1"
echo "temperature.colour FF8000"
echo "temperature.warning 19:25"
echo "temperature.critical 18:28"
echo "humidity.label Humidity"
echo "humidity.draw LINE2"
echo "humidity.colour FF0000"
echo "humidity.warning 45:55"
echo "humidity.critical 40:60"
exit 0
fi
echo "temperature.value ${temperature_02}"
echo "humidity.value ${humidity_02}"
et 22:
nano /opt/am2302/am2302_03_pin22
#!/bin/bash
query_03=$(python /opt/am2302/AdafruitDHT.py 2302 22)
temperature_03=$(echo ${query_03} | sed -e 's/Temp=\(.*\)Humidity.*/\1/' | sed 's/*//g')
humidity_03=$(echo ${query_03} | sed 's/.*Humidity=//' | sed 's/%//g')
if [ "$1" = "config" ]; then
echo "graph_title Sonde 03"
echo "graph_args --base 1000 -A -Y"
echo "graph_category sensors"
echo "temperature.label Temperature"
echo "temperature.draw LINE1"
echo "temperature.colour FF8000"
echo "temperature.warning 19:25"
echo "temperature.critical 18:28"
echo "humidity.label Humidity"
echo "humidity.draw LINE2"
echo "humidity.colour FF0000"
echo "humidity.warning 45:55"
echo "humidity.critical 40:60"
exit 0
fi
echo "temperature.value ${temperature_03}"
echo "humidity.value ${humidity_03}"
Pour les sondes 22 et 23, les valeurs « warning » et « critical » sont adaptées pour l’intérieur.
Pour que le client Munin lance les scripts:
chown +x /opt/am2302/am2302_*
ln -s /opt/am2302/am2302_01_pin24 /etc/munin/plugins/am2302_01_pin24
ln -s /opt/am2302/am2302_02_pin23 /etc/munin/plugins/am2302_02_pin23
ln -s /opt/am2302/am2302_03_pin22 /etc/munin/plugins/am2302_03_pin22
Quelques minutes plus tard, les graphiques des 3 sondes doivent commencer à être alimentés:
Sources:
http://www.home-automation-community.com/temperature-and-humidity-from-am2302-dht22-sensor-displayed-as-chart/http://www.home-automation-community.com/temperature-and-humidity-from-am2302-dht22-sensor-displayed-as-chart/
https://akizukidenshi.com/download/ds/aosong/AM2302.pdf