Consolider l'envoi de notifications

This commit is contained in:
2026-04-20 13:52:39 +02:00
parent c0b0770ddf
commit b00879cdfa
4 changed files with 27 additions and 14 deletions

13
.env
View File

@@ -12,10 +12,17 @@ MQTT_PASS=3J@bjYP0
MQTT_PORT=1883 MQTT_PORT=1883
# Synology Chat # Synology Chat
SYNO_CHAT_WEBHOOK=https://mj91.fr/chat/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=QpLWAZEqIW1EOBHkfDkmr1LqC3P3J1SASWfqpchZdd1xPY7xGbYerS4lCADJnPrm SYNO_CHAT_WEBHOOK_MONITOR_SACLAY=https://mj91.fr/chat/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=QpLWAZEqIW1EOBHkfDkmr1LqC3P3J1SASWfqpchZdd1xPY7xGbYerS4lCADJnPrm
SYNO_CHAT_VERIFY_SSL=true SYNO_CHAT_WEBHOOK_MONITOR_MEUDON=https://mj91.fr/chat/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=QpLWAZEqIW1EOBHkfDkmr1LqC3P3J1SASWfqpchZdd1xPY7xGbYerS4lCADJnPrm
SYNO_CHAT_BOTNAME="Gestion Gyro"
SYNO_CHAT_WEBHOOK_GYRO_SACLAY=https://mj91.fr/chat/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=NUqdEGbtmTBBGIN29z0AVZUeQnyZ8tskyXGpkOFqHwqOAXB8quvHxlEcewKX3Xnq
SYNO_CHAT_WEBHOOK_GYRO_MEUDON=https://mj91.fr/chat/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=NUqdEGbtmTBBGIN29z0AVZUeQnyZ8tskyXGpkOFqHwqOAXB8quvHxlEcewKX3Xnq
SYNO_CHAT_BOTNAME_MONITOR="Injection données dans tables"
SYNO_CHAT_BOTNAME_GYRO="Gestion Gyro"
SYNO_CHAT_TIMEOUT=10 SYNO_CHAT_TIMEOUT=10
SYNO_CHAT_VERIFY_SSL=true
SYNO_CHAT_GYRO_ENABLED=1 SYNO_CHAT_GYRO_ENABLED=1
# Boucle rapide du gyro # Boucle rapide du gyro

View File

@@ -392,7 +392,7 @@ def depassement_depuis_30min(site: str, sonde: str, seuil: float) -> bool:
def send_synology_chat(message: str, *, username: str | None = None) -> bool: def send_synology_chat(message: str, *, username: str | None = None) -> bool:
webhook = ( webhook = (
_env_str(f"SYNO_CHAT_WEBHOOK_{SITE}") or _env_str(f"SYNO_CHAT_WEBHOOK_{SITE}") or
_env_str(f"SYNO_CHAT_WEBHOOK_{SITE.upper()}") or _env_str(f"SYNO_CHAT_WEBHOOK_MONITOR") or
_env_str("SYNO_CHAT_WEBHOOK") _env_str("SYNO_CHAT_WEBHOOK")
) )
if not webhook: if not webhook:

View File

@@ -308,7 +308,7 @@ def depassement_depuis_30min(site: str, sonde: str, seuil: float) -> bool:
def send_synology_chat(message: str, *, username: str | None = None) -> bool: def send_synology_chat(message: str, *, username: str | None = None) -> bool:
webhook = ( webhook = (
_env_str(f"SYNO_CHAT_WEBHOOK_{SITE}") or _env_str(f"SYNO_CHAT_WEBHOOK_{SITE}") or
_env_str(f"SYNO_CHAT_WEBHOOK_{SITE.upper()}") or _env_str(f"SYNO_CHAT_WEBHOOK_MONITOR_SACLAY") or
_env_str("SYNO_CHAT_WEBHOOK") _env_str("SYNO_CHAT_WEBHOOK")
) )
if not webhook: if not webhook:

View File

@@ -47,15 +47,22 @@ DEF_NORMAL_CONFIRM = int(_env_str("GYRO_NORMAL_CONFIRM", "6"))
def send_synology_chat(message: str, *, site: str, username: str | None = None) -> bool: def send_synology_chat(message: str, *, site: str, username: str | None = None) -> bool:
webhook = ( webhook = (
_env_str(f"SYNO_CHAT_WEBHOOK_{site}") _env_str(f"SYNO_CHAT_WEBHOOK_GYRO_{site}") or
or _env_str(f"SYNO_CHAT_WEBHOOK_{site.upper()}") _env_str(f"SYNO_CHAT_WEBHOOK_GYRO_{site.upper()}") or
or _env_str("SYNO_CHAT_WEBHOOK") _env_str("SYNO_CHAT_WEBHOOK_GYRO") or
_env_str(f"SYNO_CHAT_WEBHOOK_{site}") or
_env_str(f"SYNO_CHAT_WEBHOOK_{site.upper()}") or
_env_str("SYNO_CHAT_WEBHOOK")
) )
if not webhook: if not webhook:
log.info("[%s] Synology Chat non configuré.", site) log.info("[%s] Synology Chat non configuré.", site)
return False return False
botname = username or _env_str("SYNO_CHAT_BOTNAME", "Gestion Gyro") botname = (
username or
_env_str("SYNO_CHAT_BOTNAME_GYRO") or
_env_str("SYNO_CHAT_BOTNAME", "Gestion Gyro")
)
timeout = int(_env_str("SYNO_CHAT_TIMEOUT", "10")) timeout = int(_env_str("SYNO_CHAT_TIMEOUT", "10"))
verify_ssl = _env_bool("SYNO_CHAT_VERIFY_SSL", True) verify_ssl = _env_bool("SYNO_CHAT_VERIFY_SSL", True)
@@ -63,7 +70,9 @@ def send_synology_chat(message: str, *, site: str, username: str | None = None)
if botname: if botname:
chat_payload["username"] = botname chat_payload["username"] = botname
form_data = {"payload": json.dumps(chat_payload, ensure_ascii=False)} form_data = {
"payload": json.dumps(chat_payload, ensure_ascii=False)
}
try: try:
response = requests.post( response = requests.post(
@@ -80,10 +89,7 @@ def send_synology_chat(message: str, *, site: str, username: str | None = None)
try: try:
data = response.json() data = response.json()
if isinstance(data, dict): if isinstance(data, dict):
success = bool(data.get("success", False)) return bool(data.get("success", False))
if not success:
log.warning("[%s] Synology Chat a répondu sans succès: %s", site, data)
return success
except ValueError: except ValueError:
pass pass