Graphiques Munin de sondes AM2302/DHT22

Voici une bidouille permettant de relever la température et l’hygrométrie de sondes AM2302 (version câblée) ou DHT22 (version non-câblée) à partir d’un Raspberry Pi afin 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

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.