"error", "message" => "Base de données introuvable"])); } $db = json_decode(file_get_contents($json_file), true); // Données reçues $client_input = $_POST['client_id'] ?? ''; $token_input = $_POST['token'] ?? ''; // --- 2. IDENTIFICATION & SÉCURITÉ --- $client_index = -1; $current_client = null; if (isset($db['clients'])) { foreach ($db['clients'] as $index => $c) { if (strcasecmp($c['name'], $client_input) == 0 && $c['token'] === $token_input) { $client_index = $index; $current_client = $c; break; } } } if ($client_index === -1) { http_response_code(403); die(json_encode(["status" => "error", "message" => "Authentification échouée"])); } // --- 3. TRAITEMENT IMAGE --- if (isset($_FILES['image']) && $_FILES['image']['error'] === UPLOAD_ERR_OK) { // Dossier spécifique $upload_dir = 'clients/' . $current_client['name'] . '/'; if (!is_dir($upload_dir)) mkdir($upload_dir, 0775, true); $filename = "alerte_" . date("Ymd_His") . ".jpg"; $target_file = $upload_dir . $filename; if (move_uploaded_file($_FILES['image']['tmp_name'], $target_file)) { // --- 4. APPEL IA & AUTOMATISATION --- // On reconstruit l'URL publique $public_url = "https://lucas.unigest.fr/" . $target_file; // SÉCURITÉ AJOUTÉE : "cd " . __DIR__ // On force le serveur à se mettre dans le bon dossier pour trouver admin_key.json // Champs caméra envoyés par SmartEye $env_camera_id = escapeshellarg($_POST['camera_id'] ?? ''); $env_rtsp_url = escapeshellarg($_POST['rtsp_url'] ?? ''); $env_audio_ws = escapeshellarg($_POST['audio_ws'] ?? 'ws://57.128.74.87:8800'); $env_camera_map = escapeshellarg($_POST['camera_map'] ?? '{}'); $env_client_id = escapeshellarg($current_client['name']); $safe_cmd = "cd " . __DIR__ . " && " . "LUCAS_CLIENT_ID={$env_client_id} " . "SMARTEYE_CAMERA_ID={$env_camera_id} " . "SMARTEYE_RTSP_URL={$env_rtsp_url} " . "SMARTEYE_AUDIO_WS={$env_audio_ws} " . "SMARTEYE_CAMERA_MAP={$env_camera_map} " . "python3 analyze.py " . escapeshellarg($target_file) . " 2>>/tmp/lucas_python_stderr.log"; // C'EST ICI QUE TOUT SE JOUE : // 1. PHP lance Python. // 2. Python analyse l'image. // 3. Si Urgence -> Python envoie la notif Firebase au téléphone. // 4. Python renvoie le résultat JSON à PHP. $output = shell_exec($safe_cmd); $resultat_ia = json_decode($output, true); // --- GESTION DES RÉSULTATS --- if (!$resultat_ia) { // Si le JSON est cassé (crash Python), on force l'urgence par sécurité $est_urgence = true; $message_ia = "⚠️ Erreur technique IA. Analyse visuelle requise."; // Optionnel : On logue l'erreur brute pour déboguer plus tard file_put_contents("error_python.log", date("Y-m-d H:i:s") . " - " . $output . PHP_EOL, FILE_APPEND); } else { $est_urgence = $resultat_ia['urgence'] ?? false; $message_ia = $resultat_ia['message'] ?? "Analyse terminée"; } // --- 5. MISE A JOUR BASE DE DONNÉES --- $db['clients'][$client_index]['alerte'] = $est_urgence; $db['clients'][$client_index]['last_update'] = date("d/m/Y H:i:s"); $db['clients'][$client_index]['message'] = $message_ia; file_put_contents($json_file, json_encode($db, JSON_PRETTY_PRINT)); // --- 5b. ARCHIVAGE JSON --- $history_data = [ "urgence" => $est_urgence, "message" => $message_ia, "timestamp" => date("Y-m-d H:i:s") ]; file_put_contents($target_file . ".json", json_encode($history_data)); // --- 6. LOG SMS (Optionnel : Backup SMS si urgence) --- if ($est_urgence) { $contacts = $current_client['contacts'] ?? []; $sms_body = "🚨 ALERTE CHUTE : " . $current_client['name']; // Message court pour SMS foreach ($contacts as $contact) { if (!empty($contact['phone'])) { envoyer_sms_reel($contact['phone'], $sms_body); } } } echo json_encode([ "status" => "success", "client" => $current_client['name'], "ia_result" => $resultat_ia ]); } else { http_response_code(500); echo json_encode(["status" => "error", "message" => "Erreur écriture fichier"]); } } else { http_response_code(400); echo json_encode(["status" => "error", "message" => "Pas d'image reçue"]); } function envoyer_sms_reel($numero, $message) { // Nettoyage sommaire $numero = str_replace([' ', '.', '-'], '', $numero); // Appel du gestionnaire SMS (séparé) $cmd = "python3 sms_manager.py " . escapeshellarg($numero) . " " . escapeshellarg($message) . " > /dev/null 2>&1 &"; shell_exec($cmd); } ?>