From 787d2c3a40c0a285038f6427a7e4b41d4c1f0813 Mon Sep 17 00:00:00 2001 From: Michel Date: Sun, 11 May 2025 09:14:02 +0200 Subject: [PATCH] Ajout fonction SMS avec journalisation sur develop --- Monitor.py | 9 +++++++-- alerte_sms.py | 29 ++++++++++++++++++++++------- envoyer un SMS avec OVH.py | 25 +++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 9 deletions(-) create mode 100644 envoyer un SMS avec OVH.py diff --git a/Monitor.py b/Monitor.py index 5eae0ab..ee5420b 100644 --- a/Monitor.py +++ b/Monitor.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- import mysql.connector from datetime import datetime, timedelta import time @@ -7,6 +6,7 @@ from email.mime.text import MIMEText from dotenv import load_dotenv import os from pathlib import Path +from alerte_sms import envoyer_sms_ovh if os.name != 'nt': log_dir = Path('/home/debian/Gestion_sondes/Logs') @@ -16,6 +16,7 @@ else: log_dir.mkdir(parents=True, exist_ok=True) load_dotenv() +ENVOI_SMS = os.getenv("ENVOI_SMS") == "1" # --- Config MySQL --- config = { @@ -105,8 +106,10 @@ def surveiller(): f"La sonde '{nom_sonde}' du site '{lieu}' a dépassé le seuil de {seuil}°C " f"depuis plus de 30 minutes.\nHeure : {maintenant.strftime('%Y-%m-%d %H:%M:%S')}" ) - destinataires_list = os.getenv("EMAIL_DESTINATAIRES").split(",") + destinataires_list = os.getenv("EMAIL_DESTINATAIRES", "").split(",") envoyer_mail(sujet, message, destinataires_list) + if ENVOI_SMS: + envoyer_sms_ovh(message, lieu) # Suivi pour rappels alertes_actives[nom_sonde] = maintenant @@ -122,6 +125,8 @@ def surveiller(): ) destinataires_list = os.getenv("EMAIL_DESTINATAIRES").split(",") envoyer_mail(sujet, message, destinataires_list) + if ENVOI_SMS: + envoyer_sms_ovh(message, lieu) alertes_actives[nom_sonde] = maintenant # Vérifier retour à la normale (Acquittement) diff --git a/alerte_sms.py b/alerte_sms.py index 6864a3f..ef09799 100644 --- a/alerte_sms.py +++ b/alerte_sms.py @@ -1,22 +1,34 @@ -# -*- coding: utf-8 -*- import ovh import os from dotenv import load_dotenv +from datetime import datetime +from pathlib import Path load_dotenv() # Dictionnaire des numéros par site -NUMEROS_PAR_SITE = { +PHONE_NUMBERS_BY_SITE = { "Saclay": ["+33635164680", "+33650270939","+33682069405"], "Meudon": ["+33616443455"], # ajoute d'autres sites ici } +# Dossier de logs +log_dir = Path("/home/debian/Gestion_sondes/Logs") if os.name != "nt" else Path.cwd() / "Logs" +log_dir.mkdir(parents=True, exist_ok=True) +log_file = log_dir / "journal_sms.csv" + +def journaliser_sms(message, site, phone_number): + timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + lignes = [f"{timestamp};{site};{num};{message}" for num in phone_number] + with open(log_file, "a", encoding="utf-8") as f: + for ligne in lignes: + f.write(ligne + "\n") def envoyer_sms_ovh(message, site): - numeros = NUMEROS_PAR_SITE.get(site) - if not numeros: + phone_numbers = PHONE_NUMBERS_BY_SITE.get(site) + if not phone_numbers: print(f"[!] Aucun numéro défini pour le site {site}. SMS non envoyé.") - return + return None client = ovh.Client( endpoint=os.getenv("OVH_ENDPOINT"), @@ -31,12 +43,15 @@ def envoyer_sms_ovh(message, site): result = client.post(f'/sms/{account}/jobs', sender='Supervision', message=message, - receivers=numeros, + receivers=phone_numbers, priority='high', noStopClause=True, ) - print(f"[✓] SMS envoyé pour {site} à {numeros}") + print(f"[✓] SMS envoyé pour {site} à {phone_numbers}") + journaliser_sms(message, site, phone_numbers) return result except Exception as e: print(f"[!] Erreur envoi SMS OVH : {e}") + return None + diff --git a/envoyer un SMS avec OVH.py b/envoyer un SMS avec OVH.py new file mode 100644 index 0000000..9147598 --- /dev/null +++ b/envoyer un SMS avec OVH.py @@ -0,0 +1,25 @@ +import ovh +import os +from dotenv import load_dotenv + +load_dotenv() + +def envoyer_sms_ovh(message, phone_number): + client = ovh.Client( + endpoint=os.getenv("OVH_ENDPOINT"), + application_key=os.getenv("OVH_APP_KEY"), + application_secret=os.getenv("OVH_APP_SECRET"), + consumer_key=os.getenv("OVH_CONSUMER_KEY"), + ) + + account = os.getenv("OVH_SMS_ACCOUNT") # Nom du service SMS OVH + + # Envoi du SMS + result = client.post(f'/sms/{account}/jobs', + sender='Supervision', # nom affiché sur certains téléphones + message=message, + receivers=phone_number, + priority='high', + noStopClause=True, + ) + return result