🔒 Sécurisation via .env + refactorisation Monitor et MQTT

This commit is contained in:
2025-04-22 10:48:58 +02:00
parent 4991b6354c
commit 4dd230f77b
6 changed files with 80 additions and 50 deletions

13
.env
View File

@@ -1,3 +1,16 @@
DB_HOST=54.36.188.119
DB_USER=michel
DB_PASSWORD=#SO2&1nf%mZ@jfh
DB_NAME=Sondes
MQTT_HOST=54.36.188.119
MQTT_USER=Bwps
MQTT_PASSWORD=scJ5ACj2keRfI^
# === EMAIL SMTP ===
SMTP_HOST=smtp.mail.ovh.net
SMTP_PORT=465
SMTP_USER=alertes_saclay@domo91.fr
SMTP_PASSWORD=Kdpke674y23Feq^H
EMAIL_FROM=alertes_saclay@domo91.fr
EMAIL_DEST=services@domo91.fr

1
.gitignore vendored
View File

@@ -9,6 +9,7 @@
venv/
env/
.env/
.env
# 👉 Fichiers Python compilés
__pycache__/

View File

@@ -1,30 +1,35 @@
import paho.mqtt.client as mqttClient
client = mqttClient.Client()
import mysql.connector
import sys
sys.path.insert(0, "/myenv/lib/python3.11.2/site-packages")
import os
from dotenv import load_dotenv
# Configuration de la connexion MySQL
load_dotenv()
# Site figé ici
site = "Meudon"
# Connexion MySQL
mydb = mysql.connector.connect(
host="54.36.188.119",
user="michel",
password="#SO2&1nf%mZ@jfh",
database="Sondes"
host=os.getenv("DB_HOST"),
user=os.getenv("DB_USER"),
password=os.getenv("DB_PASSWORD"),
database=os.getenv("DB_NAME")
)
# Fonction de callback quand un message est reçu
# Callback MQTT
def on_message(_client, _userdata, msg):
print(f"Message reçu sur {msg.topic}: {msg.payload.decode()}")
print(f"[{site}] Message reçu sur {msg.topic}: {msg.payload.decode()}")
cursor = mydb.cursor()
frigo_name = msg.topic.split('/')[-1] # Prend la dernière partie après le "/"
sql = "INSERT INTO Meudon (Sonde, Temperature) VALUES (%s, %s)"
frigo_name = msg.topic.split('/')[-1]
sql = f"INSERT INTO {site} (Sonde, Temperature) VALUES (%s, %s)"
val = (frigo_name, msg.payload.decode())
cursor.execute(sql, val)
mydb.commit()
# Configuration du client MQTT
client.username_pw_set("Bwps", "scJ5ACj2keRfI^")
# Client MQTT
client = mqttClient.Client()
client.username_pw_set(os.getenv("MQTT_USER"), os.getenv("MQTT_PASSWORD"))
client.on_message = on_message
client.connect("54.36.188.119", 1883, 60)
client.subscribe("Meudon/#") # S'abonner à tous les topics commençant par Saclay
client.loop_forever() # Rester connecté en continu pour écouter les messages
client.connect(os.getenv("MQTT_HOST"), 1883, 60)
client.subscribe(f"{site}/#")
client.loop_forever()

View File

@@ -1,30 +1,35 @@
import paho.mqtt.client as mqttClient
client = mqttClient.Client()
import mysql.connector
import sys
sys.path.insert(0, "/myenv/lib/python3.11.2/site-packages")
import os
from dotenv import load_dotenv
# Configuration de la connexion MySQL
load_dotenv()
# Site figé ici
site = "Saclay"
# Connexion MySQL
mydb = mysql.connector.connect(
host="54.36.188.119",
user="michel",
password="#SO2&1nf%mZ@jfh",
database="Sondes"
host=os.getenv("DB_HOST"),
user=os.getenv("DB_USER"),
password=os.getenv("DB_PASSWORD"),
database=os.getenv("DB_NAME")
)
# Fonction de callback quand un message est reçu
# Callback MQTT
def on_message(_client, _userdata, msg):
print(f"Message reçu sur {msg.topic}: {msg.payload.decode()}")
print(f"[{site}] Message reçu sur {msg.topic}: {msg.payload.decode()}")
cursor = mydb.cursor()
frigo_name = msg.topic.split('/')[-1] # Prend la dernière partie après le "/"
sql = "INSERT INTO Saclay (Sonde, Temperature) VALUES (%s, %s)"
frigo_name = msg.topic.split('/')[-1]
sql = f"INSERT INTO {site} (Sonde, Temperature) VALUES (%s, %s)"
val = (frigo_name, msg.payload.decode())
cursor.execute(sql, val)
mydb.commit()
# Configuration du client MQTT
client.username_pw_set("Bwps", "scJ5ACj2keRfI^")
# Client MQTT
client = mqttClient.Client()
client.username_pw_set(os.getenv("MQTT_USER"), os.getenv("MQTT_PASSWORD"))
client.on_message = on_message
client.connect("54.36.188.119", 1883, 60)
client.subscribe("Saclay/#") # S'abonner à tous les topics commençant par Saclay
client.loop_forever() # Rester connecté en continu pour écouter les messages
client.connect(os.getenv("MQTT_HOST"), 1883, 60)
client.subscribe(f"{site}/#")
client.loop_forever()

View File

@@ -5,32 +5,38 @@ import time
import smtplib
from email.mime.text import MIMEText
import pandas as pd
from dotenv import load_dotenv
import os
# Charger les variables d'environnement
load_dotenv()
# --- Config MySQL ---
config = {
"host": "54.36.188.119",
"user": "michel",
"password": "#SO2&1nf%mZ@jfh",
"database": "Sondes"
"host": os.getenv("DB_HOST"),
"user": os.getenv("DB_USER"),
"password": os.getenv("DB_PASSWORD"),
"database": os.getenv("DB_NAME")
}
# --- Destinataires email ---
destinataires = ['services@domo91.fr']
destinataires = os.getenv("EMAIL_DEST").split(",")
# --- Fonction d'envoi de mail ---
def envoyer_mail(sujet, message, destinataires):
msg = MIMEText(message)
msg['Subject'] = sujet
msg['From'] = 'alertes_saclay@domo91.fr'
msg['From'] = os.getenv("EMAIL_FROM")
msg['To'] = ', '.join(destinataires)
try:
with smtplib.SMTP_SSL('smtp.mail.ovh.net', 465) as server:
server.login('alertes_saclay@domo91.fr', 'Kdpke674y23Feq^H')
with smtplib.SMTP_SSL(os.getenv("SMTP_HOST"), int(os.getenv("SMTP_PORT"))) as server:
server.login(os.getenv("SMTP_USER"), os.getenv("SMTP_PASSWORD"))
server.sendmail(msg['From'], destinataires, msg.as_string())
print(f"📧 Mail envoyé à {destinataires}", flush=True)
except Exception as e:
print(f"Erreur envoi mail : {e}", flush=True)
# --- Fonction de surveillance ---
def surveiller():
log_entries = []

View File

@@ -6,11 +6,13 @@ from datetime import date
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from fpdf import FPDF
from dotenv import load_dotenv
load_dotenv()
import os
import random
import datetime
st.set_page_config(page_title="Domo91 - Surveillance", layout="wide")
st.set_page_config(page_title="Domo91 - Gestion sondes", layout="wide")
if "authenticated" not in st.session_state:
st.session_state["authenticated"] = False
st.session_state["role"] = None
@@ -20,13 +22,11 @@ st.title("📡 Supervision Températures")
# --- Configuration base de données ---
db_config = {
"host": "54.36.188.119",
"user": "michel",
"password": "#SO2&1nf%mZ@jfh",
"database": "Sondes"
"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}")