From 67fc5a707bbff59cb9d7777522ed009cd7066442 Mon Sep 17 00:00:00 2001 From: Michel Date: Sat, 26 Apr 2025 10:22:38 +0200 Subject: [PATCH] "Modifications de domo91 & Monitor" --- Monitor.py | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/Monitor.py b/Monitor.py index 2bc9325..29236bd 100644 --- a/Monitor.py +++ b/Monitor.py @@ -1,4 +1,4 @@ -# Surveillance continue avec envoi d'alertes par email + log CSV +# Surveillance continue avec envoi d'alertes par email + rappels + log CSV import mysql.connector from datetime import datetime, timedelta import time @@ -19,7 +19,10 @@ config = { } # --- Destinataires email --- -destinataires = ['services@domo91.fr,cuisine@bw-paris-saclay.com>'] +destinataires = ['services@domo91.fr', 'michel-68000@hotmail.fr'] + +# --- Suivi des alertes actives pour rappels --- +alertes_actives = {} # --- Fonction d'envoi de mail --- def envoyer_mail(sujet, message, destinataires): @@ -37,6 +40,7 @@ def envoyer_mail(sujet, message, destinataires): # --- Fonction de surveillance --- def surveiller(): + global alertes_actives log_entries = [] try: conn = mysql.connector.connect(**config) @@ -63,7 +67,6 @@ def surveiller(): """, (nom_sonde,)) relevés = cursor.fetchall() - # Log CSV : tous les relevés analysés for r in relevés: log_entries.append({ "Date": r['Date'], @@ -91,14 +94,30 @@ def surveiller(): (nom_sonde,) ) print(f"🚨 Alerte déclenchée pour {nom_sonde} ({lieu})", flush=True) + sujet = f"🚨 ALERTE TEMPÉRATURE - {nom_sonde} ({lieu})" message = ( 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 : {maintenant.strftime('%Y-%m-%d %H:%M:%S')}" ) envoyer_mail(sujet, message, destinataires) - # Acquittement automatique + # Suivi pour rappels + alertes_actives[nom_sonde] = maintenant + + else: + # Alerte déjà en cours : vérifier s'il faut faire un rappel + dernier_envoi = alertes_actives.get(nom_sonde) + if dernier_envoi and (maintenant - dernier_envoi >= timedelta(hours=1)): + sujet = f"🔔 RAPPEL ALERTE TEMPÉRATURE - {nom_sonde} ({lieu})" + message = ( + f"La sonde '{nom_sonde}' du site '{lieu}' est TOUJOURS en dépassement de seuil (>{seuil}°C).\n" + f"Heure : {maintenant.strftime('%Y-%m-%d %H:%M:%S')}" + ) + envoyer_mail(sujet, message, destinataires) + alertes_actives[nom_sonde] = maintenant + + # Vérifier retour à la normale (Acquittement) cursor.execute(f""" SELECT Temperature FROM {table_temp} WHERE Sonde = %s @@ -112,11 +131,14 @@ def surveiller(): WHERE Sonde = %s AND Status IN ('En cours', 'Test') """, (nom_sonde,)) + # Nettoyage du suivi si normalisé + if nom_sonde in alertes_actives: + del alertes_actives[nom_sonde] + conn.commit() cursor.close() conn.close() - # Enregistrer le log if log_entries: df_logs = pd.DataFrame(log_entries) df_logs.to_csv("/home/debian/travail/Logs/monitor.csv", sep=";", index=False) @@ -129,3 +151,4 @@ while True: print(f"📡 Vérification à {datetime.now()}", flush=True) surveiller() time.sleep(300) # 5 minutes +