Files
Lucas/sms_manager.py
Debian 24dbc7cd6a Initial commit — Serveur Lucas SmartEye
API réception alertes chute (SmartEye/YOLO), analyse IA (Gemini 2.5 Flash),
gestion alertes avec escalade (watchdog), notifications Firebase,
dashboard web, documentation MkDocs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 21:26:06 +01:00

141 lines
4.4 KiB
Python
Executable File

# -*- coding: utf-8 -*-
import json
import ovh
import os
import sys
import psycopg2
# DB Config
DB_PARAMS = {
"host": "localhost",
"database": "smarteye",
"user": "lucas",
"password": "smarteye_db_pass"
}
# --- CONFIGURATION OVH (A REMPLIR AVEC TES VRAIES CLES) ---
client = ovh.Client(
endpoint='ovh-eu',
application_key='dc809738a0e0ca05',
application_secret='9a0b1723318676047919f397cabbd4d6',
consumer_key='f1cd0f7101fe2f9e57d1e3bc7c230fa0'
)
SERVICE_NAME = "sms-gr31483-1" # Ton ID Service (gardé de ton ancien code)
# --- MAIN : Réception des ordres de PHP ---
if __name__ == "__main__":
# On attend 2 arguments : le numéro et le message
if len(sys.argv) < 3:
print("Erreur: Arguments manquants")
sys.exit(1)
destinataire = sys.argv[1]
message_txt = sys.argv[2]
try:
# ENVOI REEL OVH
result = client.post(f'/sms/{SERVICE_NAME}/jobs',
message=message_txt,
sender="UNIGESTFR",
receivers=[destinataire],
noStopClause=True,
priority="high"
)
print(f"✅ SUCCÈS OVH: {result}")
except Exception as e:
print(f"❌ ERREUR OVH: {str(e)}")
def get_contacts(client_id):
"""Lit database.json et renvoie le Nom du client et la liste des numéros"""
db_path = '/var/www/lucas/database.json' # Chemin absolu pour être sûr
if not os.path.exists(db_path):
return "Inconnu", []
try:
with open(db_path, 'r') as f:
data = json.load(f)
# Structure : clients -> client_id -> contacts
client_data = data.get("clients", {}).get(client_id)
if not client_data:
return "Client Inconnu", []
nom_client = client_data.get("name", "Client")
contacts_list = client_data.get("contacts", [])
numeros_a_contacter = []
for contact in contacts_list:
phone = contact.get("phone")
if phone:
# Nettoyage
clean = phone.replace(" ", "").replace(".", "").replace("-", "")
numeros_a_contacter.append(clean)
return nom_client, numeros_a_contacter
except Exception as e:
sys.stderr.write(f"Erreur lecture DB: {e}\n")
return "Erreur", []
def send_alert(client_id, image_url=""):
"""Envoie le SMS à tous les contacts du client"""
nom_client, numeros = get_contacts(client_id)
if not numeros:
return False, "Aucun contact trouvé"
message_txt = f"ALERTE CHUTE ! {nom_client} est au sol. Voir preuve : {image_url}"
# On tronque si trop long (sécurité)
if len(message_txt) > 160: message_txt = message_txt[:160]
logs = []
for num in numeros:
try:
# ENVOI REEL OVH
result = client.post(f'/sms/{SERVICE_NAME}/jobs',
message=message_txt,
sender="UNIGESTFR", # <--- ON AJOUTE TON SENDER ICI
senderForResponse=False, # <--- ON MET FALSE (Impossible de répondre à un nom)
receivers=[num],
noStopClause=True,
priority="high"
)
)
logs.append(f"OK vers {num}")
# --- LOG TO POSTGRES ---
try:
conn = psycopg2.connect(**DB_PARAMS)
cur = conn.cursor()
cur.execute("""
INSERT INTO sms_logs (to_number, client_name, message, status, provider_id)
VALUES (%s, %s, %s, %s, %s)
""", (num, nom_client, message_txt, "SENT", str(result.get('ids', [''])[0])))
conn.commit()
cur.close()
conn.close()
except Exception as e:
logs.append(f"DB ERROR: {e}")
except Exception as e:
logs.append(f"ECHEC vers {num}: {str(e)}")
# Log failure to DB too
try:
conn = psycopg2.connect(**DB_PARAMS)
cur = conn.cursor()
cur.execute("""
INSERT INTO sms_logs (to_number, client_name, message, status)
VALUES (%s, %s, %s, %s)
""", (num, nom_client, message_txt, "ERROR"))
conn.commit()
cur.close()
conn.close()
except: pass
return True, ", ".join(logs)