Limitation des SMS

This commit is contained in:
2025-10-14 09:06:00 +02:00
parent 4bd43a3611
commit e5896ad32f
3 changed files with 27 additions and 5 deletions

12
.env
View File

@@ -16,7 +16,7 @@ GYRO_CHECK_SEC=20
GYRO_NORMAL_CONFIRM=2 GYRO_NORMAL_CONFIRM=2
GYRO_MODE_CONTINUOUS=1 GYRO_MODE_CONTINUOUS=1
GYRO_HYSTERESIS=0.3 GYRO_HYSTERESIS=0.3
ALERT_OK_SMS_GYRO=1 ALERT_OK_SMS_GYRO=0
ALERT_OK_SMS=0 ALERT_OK_SMS=0
GYRO_SMS_MIN_SEC=120 GYRO_SMS_MIN_SEC=120
GYRO_MQTT_TOPIC_SACLAY=Saclay/gyrophare GYRO_MQTT_TOPIC_SACLAY=Saclay/gyrophare
@@ -48,12 +48,18 @@ OVH_CONSUMER_KEY=305f2e8611e58b83930de84ee65c99f9
OVH_SMS_SERVICE=sms-jm164396-1 OVH_SMS_SERVICE=sms-jm164396-1
OVH_SMS_SENDER=DOMO91FR OVH_SMS_SENDER=DOMO91FR
SMS_RECEIVER=+33759600180 SMS_RECEIVER=+33759600180
ALERT_SMS_TO_SACLAY=Michel:+33635164680 ALERT_SMS_TO_SACLAY=Michel:+33759600180
ALERT_SMS_TO_MEUDON=Michel:+33635164680 ALERT_SMS_TO_MEUDON=Michel:+33759600180
ALERT_SMS_CLIENT_TO_MEUDON=Sekou:+33625903364,Damien:+33680388259 ALERT_SMS_CLIENT_TO_MEUDON=Sekou:+33625903364,Damien:+33680388259
ALERT_SMS_CLIENT_TO_SACLAY=Nicolas:+33682069405,Sabrina:+33650270939,Mirceta:+33601162960 ALERT_SMS_CLIENT_TO_SACLAY=Nicolas:+33682069405,Sabrina:+33650270939,Mirceta:+33601162960
# Activer/désactiver globalement lenvoi client # Activer/désactiver globalement lenvoi client
ALERT_SMS_CLIENT_ENABLED=1 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)

View File

@@ -14,6 +14,10 @@ from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv(usecwd=True), override=False) load_dotenv(find_dotenv(usecwd=True), override=False)
from utils_sms import normaliser_sms 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 # MySQL
import mysql.connector import mysql.connector
from mysql.connector import Error as MySQLError from mysql.connector import Error as MySQLError
@@ -698,7 +702,7 @@ class GyroPulseController:
# Anti-spam SMS & SMS OK activé par défaut # Anti-spam SMS & SMS OK activé par défaut
self._last_sms: dict[str, float] = {} # {sonde: ts dernier envoi} 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") self._send_ok = (os.getenv("ALERT_OK_SMS_GYRO", "1") == "1")
# Conserver le dernier déclencheur (pour SMS OK) # Conserver le dernier déclencheur (pour SMS OK)
@@ -730,6 +734,8 @@ class GyroPulseController:
return False return False
def _send_alert_sms(self, trigger: tuple[str, float, float] | None): def _send_alert_sms(self, trigger: tuple[str, float, float] | None):
if not _env_bool("ALERT_INTERNAL_SMS_ENABLED", True):
return
if not trigger: if not trigger:
return return
sonde, temp, seuil = trigger sonde, temp, seuil = trigger
@@ -738,6 +744,8 @@ class GyroPulseController:
self.notifier.send_sms(sms_text) self.notifier.send_sms(sms_text)
def _send_ok_sms_from_last_trigger(self): 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: if not self._send_ok or not self._last_trigger:
return return
sonde, _temp_prev, seuil = self._last_trigger sonde, _temp_prev, seuil = self._last_trigger

View File

@@ -14,6 +14,10 @@ from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv(usecwd=True), override=False) load_dotenv(find_dotenv(usecwd=True), override=False)
from utils_sms import normaliser_sms 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 # MySQL
import mysql.connector import mysql.connector
from mysql.connector import Error as MySQLError from mysql.connector import Error as MySQLError
@@ -698,7 +702,7 @@ class GyroPulseController:
# Anti-spam SMS & SMS OK activé par défaut # Anti-spam SMS & SMS OK activé par défaut
self._last_sms: dict[str, float] = {} # {sonde: ts dernier envoi} 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") self._send_ok = (os.getenv("ALERT_OK_SMS_GYRO", "1") == "1")
# Conserver le dernier déclencheur (pour SMS OK) # Conserver le dernier déclencheur (pour SMS OK)
@@ -730,6 +734,8 @@ class GyroPulseController:
return False return False
def _send_alert_sms(self, trigger: tuple[str, float, float] | None): def _send_alert_sms(self, trigger: tuple[str, float, float] | None):
if not _env_bool("ALERT_INTERNAL_SMS_ENABLED", True):
return
if not trigger: if not trigger:
return return
sonde, temp, seuil = trigger sonde, temp, seuil = trigger
@@ -738,6 +744,8 @@ class GyroPulseController:
self.notifier.send_sms(sms_text) self.notifier.send_sms(sms_text)
def _send_ok_sms_from_last_trigger(self): 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: if not self._send_ok or not self._last_trigger:
return return
sonde, _temp_prev, seuil = self._last_trigger sonde, _temp_prev, seuil = self._last_trigger