🔒 Sécurisation via .env + refactorisation Monitor et MQTT
This commit is contained in:
13
.env
13
.env
@@ -1,3 +1,16 @@
|
|||||||
DB_HOST=54.36.188.119
|
DB_HOST=54.36.188.119
|
||||||
DB_USER=michel
|
DB_USER=michel
|
||||||
DB_PASSWORD=#SO2&1nf%mZ@jfh
|
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
1
.gitignore
vendored
@@ -9,6 +9,7 @@
|
|||||||
venv/
|
venv/
|
||||||
env/
|
env/
|
||||||
.env/
|
.env/
|
||||||
|
.env
|
||||||
|
|
||||||
# 👉 Fichiers Python compilés
|
# 👉 Fichiers Python compilés
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
|||||||
@@ -1,30 +1,35 @@
|
|||||||
import paho.mqtt.client as mqttClient
|
import paho.mqtt.client as mqttClient
|
||||||
client = mqttClient.Client()
|
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import sys
|
import os
|
||||||
sys.path.insert(0, "/myenv/lib/python3.11.2/site-packages")
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
# Configuration de la connexion MySQL
|
load_dotenv()
|
||||||
|
|
||||||
|
# Site figé ici
|
||||||
|
site = "Meudon"
|
||||||
|
|
||||||
|
# Connexion MySQL
|
||||||
mydb = mysql.connector.connect(
|
mydb = mysql.connector.connect(
|
||||||
host="54.36.188.119",
|
host=os.getenv("DB_HOST"),
|
||||||
user="michel",
|
user=os.getenv("DB_USER"),
|
||||||
password="#SO2&1nf%mZ@jfh",
|
password=os.getenv("DB_PASSWORD"),
|
||||||
database="Sondes"
|
database=os.getenv("DB_NAME")
|
||||||
)
|
)
|
||||||
|
|
||||||
# Fonction de callback quand un message est reçu
|
# Callback MQTT
|
||||||
def on_message(_client, _userdata, msg):
|
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()
|
cursor = mydb.cursor()
|
||||||
frigo_name = msg.topic.split('/')[-1] # Prend la dernière partie après le "/"
|
frigo_name = msg.topic.split('/')[-1]
|
||||||
sql = "INSERT INTO Meudon (Sonde, Temperature) VALUES (%s, %s)"
|
sql = f"INSERT INTO {site} (Sonde, Temperature) VALUES (%s, %s)"
|
||||||
val = (frigo_name, msg.payload.decode())
|
val = (frigo_name, msg.payload.decode())
|
||||||
cursor.execute(sql, val)
|
cursor.execute(sql, val)
|
||||||
mydb.commit()
|
mydb.commit()
|
||||||
|
|
||||||
# Configuration du client MQTT
|
# Client MQTT
|
||||||
client.username_pw_set("Bwps", "scJ5ACj2keRfI^")
|
client = mqttClient.Client()
|
||||||
|
client.username_pw_set(os.getenv("MQTT_USER"), os.getenv("MQTT_PASSWORD"))
|
||||||
client.on_message = on_message
|
client.on_message = on_message
|
||||||
client.connect("54.36.188.119", 1883, 60)
|
client.connect(os.getenv("MQTT_HOST"), 1883, 60)
|
||||||
client.subscribe("Meudon/#") # S'abonner à tous les topics commençant par Saclay
|
client.subscribe(f"{site}/#")
|
||||||
client.loop_forever() # Rester connecté en continu pour écouter les messages
|
client.loop_forever()
|
||||||
@@ -1,30 +1,35 @@
|
|||||||
import paho.mqtt.client as mqttClient
|
import paho.mqtt.client as mqttClient
|
||||||
client = mqttClient.Client()
|
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import sys
|
import os
|
||||||
sys.path.insert(0, "/myenv/lib/python3.11.2/site-packages")
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
# Configuration de la connexion MySQL
|
load_dotenv()
|
||||||
|
|
||||||
|
# Site figé ici
|
||||||
|
site = "Saclay"
|
||||||
|
|
||||||
|
# Connexion MySQL
|
||||||
mydb = mysql.connector.connect(
|
mydb = mysql.connector.connect(
|
||||||
host="54.36.188.119",
|
host=os.getenv("DB_HOST"),
|
||||||
user="michel",
|
user=os.getenv("DB_USER"),
|
||||||
password="#SO2&1nf%mZ@jfh",
|
password=os.getenv("DB_PASSWORD"),
|
||||||
database="Sondes"
|
database=os.getenv("DB_NAME")
|
||||||
)
|
)
|
||||||
|
|
||||||
# Fonction de callback quand un message est reçu
|
# Callback MQTT
|
||||||
def on_message(_client, _userdata, msg):
|
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()
|
cursor = mydb.cursor()
|
||||||
frigo_name = msg.topic.split('/')[-1] # Prend la dernière partie après le "/"
|
frigo_name = msg.topic.split('/')[-1]
|
||||||
sql = "INSERT INTO Saclay (Sonde, Temperature) VALUES (%s, %s)"
|
sql = f"INSERT INTO {site} (Sonde, Temperature) VALUES (%s, %s)"
|
||||||
val = (frigo_name, msg.payload.decode())
|
val = (frigo_name, msg.payload.decode())
|
||||||
cursor.execute(sql, val)
|
cursor.execute(sql, val)
|
||||||
mydb.commit()
|
mydb.commit()
|
||||||
|
|
||||||
# Configuration du client MQTT
|
# Client MQTT
|
||||||
client.username_pw_set("Bwps", "scJ5ACj2keRfI^")
|
client = mqttClient.Client()
|
||||||
|
client.username_pw_set(os.getenv("MQTT_USER"), os.getenv("MQTT_PASSWORD"))
|
||||||
client.on_message = on_message
|
client.on_message = on_message
|
||||||
client.connect("54.36.188.119", 1883, 60)
|
client.connect(os.getenv("MQTT_HOST"), 1883, 60)
|
||||||
client.subscribe("Saclay/#") # S'abonner à tous les topics commençant par Saclay
|
client.subscribe(f"{site}/#")
|
||||||
client.loop_forever() # Rester connecté en continu pour écouter les messages
|
client.loop_forever()
|
||||||
22
Monitor.py
22
Monitor.py
@@ -5,32 +5,38 @@ import time
|
|||||||
import smtplib
|
import smtplib
|
||||||
from email.mime.text import MIMEText
|
from email.mime.text import MIMEText
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Charger les variables d'environnement
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
# --- Config MySQL ---
|
# --- Config MySQL ---
|
||||||
config = {
|
config = {
|
||||||
"host": "54.36.188.119",
|
"host": os.getenv("DB_HOST"),
|
||||||
"user": "michel",
|
"user": os.getenv("DB_USER"),
|
||||||
"password": "#SO2&1nf%mZ@jfh",
|
"password": os.getenv("DB_PASSWORD"),
|
||||||
"database": "Sondes"
|
"database": os.getenv("DB_NAME")
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- Destinataires email ---
|
# --- Destinataires email ---
|
||||||
destinataires = ['services@domo91.fr']
|
destinataires = os.getenv("EMAIL_DEST").split(",")
|
||||||
|
|
||||||
# --- Fonction d'envoi de mail ---
|
# --- Fonction d'envoi de mail ---
|
||||||
def envoyer_mail(sujet, message, destinataires):
|
def envoyer_mail(sujet, message, destinataires):
|
||||||
msg = MIMEText(message)
|
msg = MIMEText(message)
|
||||||
msg['Subject'] = sujet
|
msg['Subject'] = sujet
|
||||||
msg['From'] = 'alertes_saclay@domo91.fr'
|
msg['From'] = os.getenv("EMAIL_FROM")
|
||||||
msg['To'] = ', '.join(destinataires)
|
msg['To'] = ', '.join(destinataires)
|
||||||
try:
|
try:
|
||||||
with smtplib.SMTP_SSL('smtp.mail.ovh.net', 465) as server:
|
with smtplib.SMTP_SSL(os.getenv("SMTP_HOST"), int(os.getenv("SMTP_PORT"))) as server:
|
||||||
server.login('alertes_saclay@domo91.fr', 'Kdpke674y23Feq^H')
|
server.login(os.getenv("SMTP_USER"), os.getenv("SMTP_PASSWORD"))
|
||||||
server.sendmail(msg['From'], destinataires, msg.as_string())
|
server.sendmail(msg['From'], destinataires, msg.as_string())
|
||||||
print(f"📧 Mail envoyé à {destinataires}", flush=True)
|
print(f"📧 Mail envoyé à {destinataires}", flush=True)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Erreur envoi mail : {e}", flush=True)
|
print(f"Erreur envoi mail : {e}", flush=True)
|
||||||
|
|
||||||
|
|
||||||
# --- Fonction de surveillance ---
|
# --- Fonction de surveillance ---
|
||||||
def surveiller():
|
def surveiller():
|
||||||
log_entries = []
|
log_entries = []
|
||||||
|
|||||||
14
domo91.py
14
domo91.py
@@ -6,11 +6,13 @@ from datetime import date
|
|||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import matplotlib.dates as mdates
|
import matplotlib.dates as mdates
|
||||||
from fpdf import FPDF
|
from fpdf import FPDF
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
load_dotenv()
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
import datetime
|
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:
|
if "authenticated" not in st.session_state:
|
||||||
st.session_state["authenticated"] = False
|
st.session_state["authenticated"] = False
|
||||||
st.session_state["role"] = None
|
st.session_state["role"] = None
|
||||||
@@ -20,13 +22,11 @@ st.title("📡 Supervision Températures")
|
|||||||
|
|
||||||
# --- Configuration base de données ---
|
# --- Configuration base de données ---
|
||||||
db_config = {
|
db_config = {
|
||||||
"host": "54.36.188.119",
|
"host": os.getenv("DB_HOST"),
|
||||||
"user": "michel",
|
"user": os.getenv("DB_USER"),
|
||||||
"password": "#SO2&1nf%mZ@jfh",
|
"password": os.getenv("DB_PASSWORD"),
|
||||||
"database": "Sondes"
|
"database": os.getenv("DB_NAME")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# --- Fonction de génération PDF ---
|
# --- Fonction de génération PDF ---
|
||||||
def generer_pdf(site, date_str):
|
def generer_pdf(site, date_str):
|
||||||
st.info(f"Génération du rapport PDF pour {site} à la date {date_str}")
|
st.info(f"Génération du rapport PDF pour {site} à la date {date_str}")
|
||||||
|
|||||||
Reference in New Issue
Block a user