Mise à jour 11

This commit is contained in:
2025-04-22 15:39:32 +02:00
parent fdd5ef5a67
commit 0c042cf87a

View File

@@ -1,12 +1,14 @@
# Surveillance continue avec envoi d'alertes par email + log CSV # Surveillance continue avec envoi d'alertes par email + log CSV
import mysql.connector import mysql.connector
from datetime import datetime, timedelta from datetime import datetime, timedelta
import time
import smtplib import smtplib
from email.mime.text import MIMEText from email.mime.text import MIMEText
import pandas as pd import pandas as pd
import os
from dotenv import load_dotenv from dotenv import load_dotenv
import os
# Charger les variables d'environnement
load_dotenv() load_dotenv()
# --- Config MySQL --- # --- Config MySQL ---
@@ -17,27 +19,23 @@ config = {
"database": os.getenv("DB_NAME") "database": os.getenv("DB_NAME")
} }
# --- Destinataires email ---
# --- Fonction de sélection des destinataires selon le site --- destinataires = ['services@domo91.fr']
def get_destinataires(lieu):
return os.getenv(f"EMAIL_{lieu.upper()}", os.getenv("EMAIL_DEFAULT")).split(",")
# --- Fonction d'envoi de mail --- # --- Fonction d'envoi de mail ---
def envoyer_mail(sujet, message, destinataires): def envoyer_mail(sujet, message, destinataires):
msg = MIMEText(message) msg = MIMEText(message)
msg['Subject'] = sujet msg['Subject'] = sujet
msg['From'] = os.getenv("EMAIL_FROM") msg['From'] = 'alertes_saclay@domo91.fr'
msg['To'] = ', '.join(destinataires) msg['To'] = ', '.join(destinataires)
try: try:
with smtplib.SMTP_SSL(os.getenv("SMTP_HOST"), int(os.getenv("SMTP_PORT"))) as server: with smtplib.SMTP_SSL('smtp.mail.ovh.net', 465) as server:
server.login(os.getenv("SMTP_USER"), os.getenv("SMTP_PASSWORD")) server.login('alertes_saclay@domo91.fr', 'Kdpke674y23Feq^H')
server.sendmail(msg['From'], destinataires, msg.as_string()) server.sendmail(msg['From'], destinataires, msg.as_string())
print(f"📧 Mail envoyé à {destinataires}", flush=True) print(f"📧 Mail envoyé à {destinataires}", flush=True)
except Exception as e: except Exception as e:
print(f"Erreur envoi mail : {e}", flush=True) print(f"Erreur envoi mail : {e}", flush=True)
# --- Fonction de surveillance --- # --- Fonction de surveillance ---
def surveiller(): def surveiller():
log_entries = [] log_entries = []
@@ -64,9 +62,10 @@ def surveiller():
WHERE Sonde = %s WHERE Sonde = %s
ORDER BY Date DESC LIMIT 6 ORDER BY Date DESC LIMIT 6
""", (nom_sonde,)) """, (nom_sonde,))
releves = cursor.fetchall() relevés = cursor.fetchall()
for r in releves: # Log CSV : tous les relevés analysés
for r in relevés:
log_entries.append({ log_entries.append({
"Date": r['Date'], "Date": r['Date'],
"Lieu": lieu, "Lieu": lieu,
@@ -76,9 +75,9 @@ def surveiller():
"État": "Dépassement" if r['Temperature'] > seuil else "Normal" "État": "Dépassement" if r['Temperature'] > seuil else "Normal"
}) })
if len(releves) == 6: if len(relevés) == 6:
toutes_hors_seuil = all(r['Temperature'] > seuil for r in releves) toutes_hors_seuil = all(r['Temperature'] > seuil for r in relevés)
plus_ancien = releves[-1]['Date'] plus_ancien = relevés[-1]['Date']
maintenant = datetime.now() maintenant = datetime.now()
if toutes_hors_seuil and (maintenant - plus_ancien >= timedelta(minutes=30)): if toutes_hors_seuil and (maintenant - plus_ancien >= timedelta(minutes=30)):
@@ -98,7 +97,7 @@ def surveiller():
f"La sonde '{nom_sonde}' du site '{lieu}' a dépassé le seuil de {seuil}°C " f"La sonde '{nom_sonde}' du site '{lieu}' a dépassé le seuil de {seuil}°C "
f"depuis plus de 30 minutes.\nHeure : {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}" f"depuis plus de 30 minutes.\nHeure : {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
) )
envoyer_mail(sujet, message, get_destinataires(lieu)) envoyer_mail(sujet, message, destinataires)
# Acquittement automatique # Acquittement automatique
cursor.execute(f""" cursor.execute(f"""
@@ -121,8 +120,13 @@ def surveiller():
# Enregistrer le log # Enregistrer le log
if log_entries: if log_entries:
df_logs = pd.DataFrame(log_entries) df_logs = pd.DataFrame(log_entries)
df_logs.to_csv("/home/debian/travail/Gestion_sondes/Logs/monitor.csv", sep=";", index=False) df_logs.to_csv("/home/debian/travail/logs/monitor.csv", sep=";", index=False)
except Exception as e: except Exception as e:
print()
print(f"Erreur : {e}", flush=True) print(f"Erreur : {e}", flush=True)
# --- Boucle principale ---
while True:
print(f"📡 Vérification à {datetime.now()}", flush=True)
surveiller()
time.sleep(300) # 5 minutes