Partie V
Logique métier
Nous sommes prêt à structurer plus proprement notre application en séparant :
- la partie capteurs (lecture, calculs...) -> Logique métier
- et l’application web (routes, affichage)
Création d'un fichier capteur.py
Dans une démarche de développement propre, modulaire et réutilisable, on sépare la logique métier (la lecture des données et les calculs) de l’interface utilisateur (site web, affichage).
Le fichier capteur.py ne contient plus de boucle while True ni de traitement direct. Il est composé exclusivement de fonctions, que l’on pourra appeler depuis une autre application, ici app.py (notre serveur Flask).
Ce script agit comme une boîte à outils, il regroupe :
- la lecture du capteur DHT22,
- le calcul du point de rosée,
- le calcul de l’indice humidex,
- la récupération de la date et heure actuelles.
Code
#importations
import adafruit_dht
import board
import math
from datetime import datetime
def lire_donnees_capteur():
try:
dhtDevice = adafruit_dht.DHT22(board.D4)
humidity = dhtDevice.humidity
temperature = dhtDevice.temperature
dhtDevice.exit()
if humidity is not None and temperature is not None:
return round(humidity, 1), round(temperature, 1)
else:
return None, None
except RuntimeError as error:
print("Erreur de lecture :", error)
return None, None
except Exception as error:
dhtDevice.exit()
raise error
def calculer_point_de_rosee(temperature, humidity):
#Formule pour calculer le point de rosée
alpha = 17.27
beta = 237.7
gamma = (alpha * temperature) / (beta + temperature) + math.log(humidity / 100)
point_de_rosee = (beta * gamma) / (alpha - gamma)
return round(point_de_rosee, 1)
def calculer_humidex(temperature, point_de_rosee):
#Formule pour calculer l'indice humidex
humidex = temperature + (5/9) * (6.11 * math.exp(5417.7530 * ((1/273.16) - (1/273.15 + point_de_rosee))) - 10)
return round(humidex, 1)
def recuperer_date_heure():
return datetime.now().strftime("%d-%m-%Y %H:%M:%S")