Catégories
Clients Linux

Graphiques DHT22/AM2302 avec Zabbix, v2

Quelques optimisations softwares par rapport à la 1ère version!

Dans celle-ci, il y a un exécutable par GPIO, et par type de mesure. Donc pour 4 sondes, on passe à 8 fichiers Python:

/opt/dht22/
├── DHT22.py
├── pin22_hum.py
├── pin22_temp.py
├── pin23_hum.py
├── pin23_temp.py
├── pin24_hum.py
├── pin24_temp.py
├── pin25_hum.py
├── pin25_temp.py
└── __pycache__
    └── DHT22.cpython-37.pyc

1 directory, 10 files

Autre optimisation, une sonde est interrogée au maximum 4 fois avant que le code ne s’arrête si la valeur renvoyée n’est pas comprise dans les spécifications du constructeur (humidité +0%/+100% RH – température -40°C/+80°C, poussé jusqu’à -50°C/+90+C).

Script pour obtenir l’humidité de la sonde 22 /opt/dht22/pin22_hum.py :

#!/usr/bin/env python
import sys
import pigpio
import DHT22
from time import sleep

count = 1
valid_input = True
def retrieve() :
        global count
        global valid_input
        pi = pigpio.pi()
        s = DHT22.sensor(pi,22)
        s.trigger()
        sleep(1)
        humidity = '{:3.2f}'.format(s.humidity() / 1.)
        humidity = float(humidity)
        if float(0) <= humidity <= float(100) :
                print(humidity)
                s.cancel()
                pi.stop()
                valid_input = True
                sys.exit(1)
        else:
                count += 1
                valid_input = False
                s.cancel()
                pi.stop()

while valid_input :
        while count < 5 :
                retrieve()

Script pour la température de la même sonde/opt/dht22/pin22_temp.py :

#!/usr/bin/env python
import sys
import pigpio
import DHT22
from time import sleep

valid_input = True
count = 1
def retrieve() :
        global count
        global valid_input
        pi = pigpio.pi()
        s = DHT22.sensor(pi,22)
        s.trigger()
        sleep(1)
        temperature = '{:3.2f}'.format(s.temperature() / 1.)
        temperature = float(temperature)
        if float(-50) <= temperature <= float(90) :
                print(temperature)
                s.cancel()
                pi.stop()
                valid_input = True
                sys.exit(1)
        else:
                count += 1
                valid_input = False
                s.cancel()
                pi.stop()

while valid_input :
        while count < 5 :
                retrieve()

Ligne 13: comme dans la version 1, il suffit d’adapter cette ligne en fonction du n° du GPIO, et de l’enregistrer-sous le nom de fichier correspondant.

Ligne 15: il est aussi possible de jouer sur la temporisation après interrogation de la sonde. Ici, c’est 1 seconde pour être sûr mais ces sondes et ce code fonctionnent avec des valeurs bien inférieures: sleep(.3) par exemple. A peaufiner au besoin, comme le voltage.

Le fichier /etc/sudoers est à adapter aussi:

# Zabbix
zabbix  ALL=(ALL) NOPASSWD:/usr/bin/python3 /opt/dht22/pin22_temp.py
zabbix  ALL=(ALL) NOPASSWD:/usr/bin/python3 /opt/dht22/pin22_hum.py
zabbix  ALL=(ALL) NOPASSWD:/usr/bin/python3 /opt/dht22/pin23_temp.py
zabbix  ALL=(ALL) NOPASSWD:/usr/bin/python3 /opt/dht22/pin23_hum.py
zabbix  ALL=(ALL) NOPASSWD:/usr/bin/python3 /opt/dht22/pin24_temp.py
zabbix  ALL=(ALL) NOPASSWD:/usr/bin/python3 /opt/dht22/pin24_hum.py
zabbix  ALL=(ALL) NOPASSWD:/usr/bin/python3 /opt/dht22/pin25_temp.py
zabbix  ALL=(ALL) NOPASSWD:/usr/bin/python3 /opt/dht22/pin25_hum.py

Ainsi que le fichier /etc/zabbix/zabbix_agentd.d/userparameter_dht22.conf:

# pin 22 Backbone
UserParameter=pin22.temperature,python3 /opt/dht22/pin22_temp.py 2> /dev/null
UserParameter=pin22.humidity,python3 /opt/dht22/pin22_hum.py 2> /dev/null

# pin 23 Terrarium
UserParameter=pin23.temperature,python3 /opt/dht22/pin23_temp.py 2> /dev/null
UserParameter=pin23.humidity,python3 /opt/dht22/pin23_hum.py 2> /dev/null

# pin 24 Indoor
UserParameter=pin24.temperature,python3 /opt/dht22/pin24_temp.py 2> /dev/null
UserParameter=pin24.humidity,python3 /opt/dht22/pin24_hum.py 2> /dev/null

# pin 25 Outdoor
UserParameter=pin25.temperature,python3 /opt/dht22/pin25_temp.py 2> /dev/null
UserParameter=pin25.humidity,python3 /opt/dht22/pin25_hum.py 2> /dev/null

Pour finir, le template Zabbix subit lui aussi quelques modifications:

Zabbix Template AM2302 Modules v2 au format XML zippé

Laisser un commentaire

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