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: