This commit is contained in:
2025-04-24 15:52:55 +02:00
parent 7ad495e28e
commit 6aede05b7e

View File

@@ -1,5 +1,7 @@
# Application Gestion de sondes
# -*- coding: utf-8 -*-
from logging import exception
import streamlit as st
import mysql.connector
import pandas as pd
@@ -23,13 +25,14 @@ if "authenticated" not in st.session_state:
st.title("📡 Supervision Températures")
db_config ={
db_config = {
"host": os.getenv("DB_HOST"),
"user": os.getenv("DB_USER"),
"password": os.getenv("DB_PASSWORD"),
"database": os.getenv("DB_NAME")
}
# --- Fonction de génération PDF ---
def generer_pdf(site, date_str):
st.info(f"Génération du rapport PDF pour {site} à la date {date_str}")
@@ -237,7 +240,11 @@ if st.session_state["authenticated"]:
try:
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor(dictionary=True)
if "role" not in st.session_state:
st.session_state["role"] = None
if "lieu_autorise" not in st.session_state:
st.session_state["lieu_autorise"] = None
site_selectionne = (
st.session_state["lieu_autorise"]
if st.session_state["role"] != "superviseur"
@@ -315,8 +322,8 @@ if st.session_state["authenticated"]:
seuil_temp = seuil["Temp_Max"] if seuil else 10
st.subheader("📊 Tableau des relevés")
df_filtré = df_sonde.copy()
df_filtré = df_filtré.drop(columns="Id", errors="ignore")
df_filtre = df_sonde.copy()
df_filtre = df_filtre.drop(columns="Id", errors="ignore")
def surlignage_temp(val):
@@ -328,12 +335,12 @@ if st.session_state["authenticated"]:
return ""
styled_df = df_filtré.style.applymap(surlignage_temp, subset=["Temperature"])
styled_df = df_filtre.style.applymap(surlignage_temp, subset=["Temperature"])
st.dataframe(styled_df, use_container_width=True)
st.subheader("📈 Évolution de la température")
fig, ax = plt.subplots(figsize=(10, 4))
ax.plot(df_filtré["Date"], df_filtré["Temperature"], marker='o', label="Température")
ax.plot(df_filtre["Date"], df_filtre["Temperature"], marker='o', label="Température")
ax.axhline(seuil_temp, color='red', linestyle='--', label=f"Seuil {seuil_temp}°C")
ax.set_xlabel("Heure")
ax.set_ylabel("Température (°C)")
@@ -404,9 +411,8 @@ if st.session_state["authenticated"]:
except Exception as e:
st.error(f"Erreur lors de la récupération des alertes : {e}")
except Exception as err:
st.error(f"Erreur MySQL : {e}")
if st.session_state["role"] == "superviseur":
# --- Fonctionnalités administrateur : ajout et gestion des chambres froides ---
if st.session_state["role"] == "superviseur":
with st.expander("+ Ajouter une nouvelle chambre froide", expanded=False):
with st.form("ajout_sonde"):
nouvelle_sonde = st.text_input("Nom de la sonde")
@@ -418,33 +424,26 @@ if st.session_state["role"] == "superviseur":
try:
conn_add = mysql.connector.connect(**db_config)
cursor_add = conn_add.cursor()
cursor_add.execute(
"INSERT INTO Chambres_froides (Lieu, Sonde, Temp_Max, Status) VALUES (%s, %s, %s, %s)",
(site_selectionne, nouvelle_sonde, temp_max, "ON" if etat_on else "OFF")
(site, nouvelle_sonde, temp_max, "ON" if etat_on else "OFF")
)
conn_add.commit()
cursor_add.close()
conn_add.close()
st.success(f"Sonde '{nouvelle_sonde}' ajoutée avec succès au site {site_selectionne} 🎉")
# Refresh immédiat
st.success(f"Sonde '{nouvelle_sonde}' ajoutée avec succès au site {site} 🎉")
st.session_state["refresh_admin"] = random.randint(1000, 9999)
except Exception as e:
st.error(f"Erreur lors de l'ajout : {e}")
with st.expander("🛠️ Gestion des chambres froides (administrateur)", expanded=True):
# Bouton d'actualisation
with st.expander("🛠️ Gestion des chambres froides (administrateur)", expanded=True):
if st.button("🔄 Actualiser la liste"):
st.session_state["refresh_admin"] = random.randint(0, 9999) # Force le rerun
st.session_state["refresh_admin"] = random.randint(0, 9999)
try:
conn_admin = mysql.connector.connect(**db_config)
cursor_admin = conn_admin.cursor(dictionary=True)
cursor_admin.execute("SELECT * FROM Chambres_froides WHERE Lieu = %s", (site_selectionne,))
cursor_admin.execute("SELECT * FROM Chambres_froides WHERE Lieu = %s", (site,))
chambres = cursor_admin.fetchall()
if not chambres:
@@ -486,3 +485,6 @@ if st.session_state["role"] == "superviseur":
except Exception as e:
st.error(f"Erreur SQL (admin) : {e}")
except exception as err:
st.error(f"Erreur MySQL : {err}")