final
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
from flask import Flask, render_template, request, jsonify
|
||||
import requests
|
||||
from flask_talisman import Talisman
|
||||
from led import led
|
||||
import os
|
||||
import threading
|
||||
import sys
|
||||
import log
|
||||
from add_user import add_user
|
||||
@@ -48,7 +50,6 @@ def call_led():
|
||||
else:
|
||||
SystemeLumieres.eteindreLumieres()
|
||||
return jsonify({"success": True})
|
||||
# Variable temporaire pour stocker le dernier badge scanné
|
||||
dernier_badge_scanne = None
|
||||
|
||||
@app.route("/rfid-scan", methods=["POST"])
|
||||
@@ -56,47 +57,29 @@ def rfid_scan():
|
||||
global dernier_badge_scanne
|
||||
data = request.get_json()
|
||||
badge_id = data.get("badge_id")
|
||||
|
||||
# On va créer cette fonction dans ton fichier auth.py juste après
|
||||
username = auth.get_user_by_rfid(badge_id)
|
||||
|
||||
if username:
|
||||
# Le badge est dans la base de données ! On autorise.
|
||||
dernier_badge_scanne = username
|
||||
return jsonify({"success": True, "username": username})
|
||||
else:
|
||||
# Badge inconnu
|
||||
return jsonify({"success": False})
|
||||
|
||||
@app.route("/check-rfid-login", methods=["GET"])
|
||||
def check_rfid_login():
|
||||
global dernier_badge_scanne
|
||||
global current_user
|
||||
|
||||
# Si le Raspberry Pi a signalé un badge validé récemment
|
||||
if dernier_badge_scanne:
|
||||
user = dernier_badge_scanne
|
||||
|
||||
# On valide la connexion côté serveur
|
||||
current_user = user
|
||||
|
||||
# On vide la variable pour ne pas le reconnecter en boucle à l'infini
|
||||
dernier_badge_scanne = None
|
||||
|
||||
return jsonify({"success": True, "username": user})
|
||||
|
||||
return jsonify({"success": False})
|
||||
|
||||
|
||||
|
||||
@app.route("/alarme",methods=["POST"])
|
||||
def armer_alarme():
|
||||
SystemeAlarme.armer()
|
||||
return jsonify({"success": True})
|
||||
|
||||
|
||||
|
||||
|
||||
@app.route("/admin")
|
||||
def admin_page():
|
||||
return render_template("admin.html")
|
||||
@@ -131,22 +114,32 @@ def get_users():
|
||||
users = auth.get_users()
|
||||
return jsonify({"success": True, "users": users})
|
||||
|
||||
@app.route("/api/relais-pi2/<action>", methods=["GET"])
|
||||
@app.route("/api/<action>", methods=["GET"])
|
||||
def relais_pi2(action):
|
||||
"""
|
||||
Flask sert de relais. Le navigateur demande à Flask, et Flask demande au Pi 2.
|
||||
"""
|
||||
url_pi2 = f"https://pi32.local:8000/{action}"
|
||||
print(f"\n[RELAIS] 1. Tentative de contact avec le Pi 2 : {url_pi2}")
|
||||
|
||||
try:
|
||||
# L'adresse de ton Pi 2
|
||||
url_pi2 = f"https://pi32.local:8000/{action}"
|
||||
|
||||
# Le Pi 1 fait la requête ! verify=False permet d'ignorer le faux certificat
|
||||
reponse = requests.get(url_pi2, timeout=5, verify=False)
|
||||
|
||||
return jsonify(reponse.json())
|
||||
|
||||
print(f"[RELAIS] 2. Code HTTP reçu du Pi 2 : {reponse.status_code}")
|
||||
print(f"[RELAIS] 3. Texte brut reçu du Pi 2 : {reponse.text}")
|
||||
if not reponse.ok:
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"message": f"Le Pi 2 a refusé la requête (Code {reponse.status_code})"
|
||||
}), reponse.status_code
|
||||
|
||||
# Si tout va bien, on tente d'extraire le JSON
|
||||
try:
|
||||
data = reponse.json()
|
||||
return jsonify(data)
|
||||
except ValueError:
|
||||
print("[RELAIS] 4. ERREUR : Le Pi 2 n'a pas renvoyé de JSON valide.")
|
||||
return jsonify({"success": False, "message": "Réponse invalide du Pi 2"}), 502
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({"success": False, "message": str(e)})
|
||||
print(f"[RELAIS] ERREUR CRITIQUE : Impossible de joindre le Pi 2. Raison : {e}")
|
||||
return jsonify({"success": False, "message": f"Erreur de connexion : {str(e)}"}), 500
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -234,14 +234,14 @@
|
||||
<svg class="card-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
||||
<div class="card-label">Heure locale</div>
|
||||
<div class="card-value" id="clock">--:--</div>
|
||||
<div class="card-sub" id="date-display">--</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-sub" id="date-display">--</div></div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-label">Température</div>
|
||||
<div class="card-sub" id="date-display">--</div>
|
||||
</div>
|
||||
<div class="card-value" id="temp-display">-- °C</div>
|
||||
|
||||
|
||||
<div class="card">
|
||||
<div class="card"></div>
|
||||
<div class="card-label">Porte</div>
|
||||
<div class="card-sub" id="date-display">--</div>
|
||||
</div>
|
||||
@@ -273,7 +273,7 @@
|
||||
<span class="a-sub">Allumer la LED</span>
|
||||
<span class="a-arrow">›</span>
|
||||
</button>
|
||||
<button class="action-btn" onclick="callAlarm()">
|
||||
<button class="action-btn" onclick="call_led_down()">
|
||||
<span class="a-label">DOWN led</span>
|
||||
<span class="a-sub">Eteindre la led</span>
|
||||
<span class="a-arrow">›</span></button>
|
||||
@@ -306,7 +306,7 @@
|
||||
setInterval(updateClock, 1000);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
async function callAlarm() {
|
||||
try {
|
||||
const res = await fetch('/alarme', {
|
||||
@@ -316,10 +316,34 @@
|
||||
showToast("alarme activée !");
|
||||
} catch {
|
||||
showToast("Erreur lors de l'appel alarme.");
|
||||
}*/
|
||||
|
||||
async function get_temperature() {
|
||||
try {
|
||||
const res = await fetch('/api/temperature', {
|
||||
method: 'GET',
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
});
|
||||
|
||||
const data = await res.json();
|
||||
|
||||
|
||||
if (data.success) {
|
||||
document.getElementById("temp-display").textContent = data.temperature + " °C";
|
||||
} else {
|
||||
document.getElementById("temp-display").textContent = "Erreur";
|
||||
console.error("Erreur de température :", data.message);
|
||||
}
|
||||
} catch (e) {
|
||||
document.getElementById("temp-display").textContent = "Hors ligne";
|
||||
console.error("Impossible de joindre le relais pour la température.");
|
||||
}
|
||||
}
|
||||
get_temperature();
|
||||
setInterval(get_temperature, 60000);
|
||||
async function call_led_down() {
|
||||
try {
|
||||
const res = await fetch('https://pi32.local:8000down_led', {
|
||||
const res = await fetch('/api/down_led', {
|
||||
method: 'GET',
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
});
|
||||
@@ -327,10 +351,10 @@
|
||||
} catch {
|
||||
showToast("Erreur lors de l'appel board1.");
|
||||
}}
|
||||
}
|
||||
async function call_led_up() {
|
||||
|
||||
async function call_led_up() {
|
||||
try {
|
||||
const res = await fetch('https://pi32.local:8000/up_led', {
|
||||
const res = await fetch('/api/up_led', {
|
||||
method: 'GET',
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user