From e5896ad32ff321e05c9a29c038ab9e324ec8064f Mon Sep 17 00:00:00 2001 From: Michel Date: Tue, 14 Oct 2025 09:06:00 +0200 Subject: [PATCH] Limitation des SMS --- .env | 12 +++++++++--- app/Monitor_Meudon.py | 10 +++++++++- app/Monitor_Saclay.py | 10 +++++++++- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/.env b/.env index 0130ce2..dbd3051 100644 --- a/.env +++ b/.env @@ -16,7 +16,7 @@ GYRO_CHECK_SEC=20 GYRO_NORMAL_CONFIRM=2 GYRO_MODE_CONTINUOUS=1 GYRO_HYSTERESIS=0.3 -ALERT_OK_SMS_GYRO=1 +ALERT_OK_SMS_GYRO=0 ALERT_OK_SMS=0 GYRO_SMS_MIN_SEC=120 GYRO_MQTT_TOPIC_SACLAY=Saclay/gyrophare @@ -48,12 +48,18 @@ OVH_CONSUMER_KEY=305f2e8611e58b83930de84ee65c99f9 OVH_SMS_SERVICE=sms-jm164396-1 OVH_SMS_SENDER=DOMO91FR SMS_RECEIVER=+33759600180 -ALERT_SMS_TO_SACLAY=Michel:+33635164680 -ALERT_SMS_TO_MEUDON=Michel:+33635164680 +ALERT_SMS_TO_SACLAY=Michel:+33759600180 +ALERT_SMS_TO_MEUDON=Michel:+33759600180 ALERT_SMS_CLIENT_TO_MEUDON=Sekou:+33625903364,Damien:+33680388259 ALERT_SMS_CLIENT_TO_SACLAY=Nicolas:+33682069405,Sabrina:+33650270939,Mirceta:+33601162960 # Activer/désactiver globalement l’envoi client ALERT_SMS_CLIENT_ENABLED=1 +# 1) couper les SMS internes +ALERT_INTERNAL_SMS_ENABLED=0# 0 = coupe tous les SMS “internes” (déclenchement) + +# 2) limiter le flux par cooldown (par sonde) +ALERT_SMS_COOLDOWN_SEC=3600# 3600s = 1 SMS max / sonde / heure +# (compatibilité: si non défini, on retombe sur GYRO_SMS_MIN_SEC ou 120s) diff --git a/app/Monitor_Meudon.py b/app/Monitor_Meudon.py index 5f18022..46cd8db 100644 --- a/app/Monitor_Meudon.py +++ b/app/Monitor_Meudon.py @@ -14,6 +14,10 @@ from dotenv import load_dotenv, find_dotenv load_dotenv(find_dotenv(usecwd=True), override=False) from utils_sms import normaliser_sms +def _env_bool(name: str, default: bool) -> bool: + v = os.getenv(name, str(int(default))).strip().lower() + return v in ("1", "true", "yes", "on") + # MySQL import mysql.connector from mysql.connector import Error as MySQLError @@ -698,7 +702,7 @@ class GyroPulseController: # Anti-spam SMS & SMS OK activé par défaut self._last_sms: dict[str, float] = {} # {sonde: ts dernier envoi} - self._sms_min_sec = int(os.getenv("GYRO_SMS_MIN_SEC", "120")) + self._sms_min_sec = int(os.getenv("ALERT_SMS_COOLDOWN_SEC") or os.getenv("GYRO_SMS_MIN_SEC", "120")) self._send_ok = (os.getenv("ALERT_OK_SMS_GYRO", "1") == "1") # Conserver le dernier déclencheur (pour SMS OK) @@ -730,6 +734,8 @@ class GyroPulseController: return False def _send_alert_sms(self, trigger: tuple[str, float, float] | None): + if not _env_bool("ALERT_INTERNAL_SMS_ENABLED", True): + return if not trigger: return sonde, temp, seuil = trigger @@ -738,6 +744,8 @@ class GyroPulseController: self.notifier.send_sms(sms_text) def _send_ok_sms_from_last_trigger(self): + if not _env_bool("ALERT_OK_SMS_GYRO", True): + return if not self._send_ok or not self._last_trigger: return sonde, _temp_prev, seuil = self._last_trigger diff --git a/app/Monitor_Saclay.py b/app/Monitor_Saclay.py index ace0d6c..cc0ff46 100644 --- a/app/Monitor_Saclay.py +++ b/app/Monitor_Saclay.py @@ -14,6 +14,10 @@ from dotenv import load_dotenv, find_dotenv load_dotenv(find_dotenv(usecwd=True), override=False) from utils_sms import normaliser_sms +def _env_bool(name: str, default: bool) -> bool: + v = os.getenv(name, str(int(default))).strip().lower() + return v in ("1", "true", "yes", "on") + # MySQL import mysql.connector from mysql.connector import Error as MySQLError @@ -698,7 +702,7 @@ class GyroPulseController: # Anti-spam SMS & SMS OK activé par défaut self._last_sms: dict[str, float] = {} # {sonde: ts dernier envoi} - self._sms_min_sec = int(os.getenv("GYRO_SMS_MIN_SEC", "120")) + self._sms_min_sec = int(os.getenv("ALERT_SMS_COOLDOWN_SEC") or os.getenv("GYRO_SMS_MIN_SEC", "120")) self._send_ok = (os.getenv("ALERT_OK_SMS_GYRO", "1") == "1") # Conserver le dernier déclencheur (pour SMS OK) @@ -730,6 +734,8 @@ class GyroPulseController: return False def _send_alert_sms(self, trigger: tuple[str, float, float] | None): + if not _env_bool("ALERT_INTERNAL_SMS_ENABLED", True): + return if not trigger: return sonde, temp, seuil = trigger @@ -738,6 +744,8 @@ class GyroPulseController: self.notifier.send_sms(sms_text) def _send_ok_sms_from_last_trigger(self): + if not _env_bool("ALERT_OK_SMS_GYRO", True): + return if not self._send_ok or not self._last_trigger: return sonde, _temp_prev, seuil = self._last_trigger