maj fastapi

This commit is contained in:
2026-03-31 23:50:23 +02:00
parent 059552eb81
commit 4f2d3018b5
9 changed files with 256 additions and 174 deletions

View File

@@ -1,68 +0,0 @@
import os
import sys
from fastapi import FastAPI
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
composants = os.path.join(BASE_DIR, "composants", "byPanda")
sys.path.insert(0, composants)
from lumieres import SystemeLumieres
from thermostat import SystemeThermostat
#from volets import SystemeVolets
from etatsystemes import EtatSysteme
from septsegments import afficher_temperature
app = FastAPI(title="Loustiques API - Pi 2")
controleur_lumieres = SystemeLumieres()
controleur_thermostat = SystemeThermostat()
#controleur_volet = SystemeVolets()
etatSysteme = EtatSysteme()
@app.get("/up_led")
async def allumer_led():
try:
controleur_lumieres.allumerLumieres()
controleur_lumieres.modeManuel = True
etatSysteme.signalerOk()
return {"success": True, "message": "Lumière allumée par le Pi 2"}
except Exception as e:
etatSysteme.signalerProbleme()
return {"success": False, "message": str(e)}
@app.get("/down_led")
async def eteindre_led():
try:
controleur_lumieres.eteindreLumieres()
controleur_lumieres.modeManuel = True
etatSysteme.signalerOk()
return {"success": True, "message": "Lumière éteinte par le Pi 2"}
except Exception as e:
etatSysteme.signalerProbleme()
return {"success": False, "message": str(e)}
@app.get("/temperature")
async def read_temp():
try:
temp = controleur_thermostat.lireTemperature()
if temp is None:
etatSysteme.signalerProbleme()
return {"success": False, "message": "Impossible de lire le capteur DHT11"}
etatSysteme.signalerOk()
afficher_temperature(temp)
return {"success": True, "temperature": temp}
except Exception as e:
etatSysteme.signalerProbleme()
return {"success": False, "message": str(e)}
if __name__ == "__main__":
import uvicorn
uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)

185
fastapi/main.sh Executable file
View File

@@ -0,0 +1,185 @@
#!/bin/bash
cat << 'EOF'
_______ ________ ___ ___ _______ ________
|\ ___ \ |\ __ \|\ \|\ \|\ ___ \ |\ ____\
\ \ __/|\ \ \|\ \ \ \\\ \ \ __/|\ \ \___|
\ \ \_|/_\ \ ____\ \ __ \ \ \_|/_\ \ \
\ \ \_|\ \ \ \___|\ \ \ \ \ \ \_|\ \ \ \____
\ \_______\ \__\ \ \__\ \__\ \_______\ \_______\
\|_______|\|__| \|__|\|__|\|_______|\|_______|
EOF
# ==============================================
# Script de configuration automatique Raspberry Pi - Projet IoT
# ==============================================
set -euo pipefail
SEPARATOR="=============================================="
print_step() {
echo ""
echo "$SEPARATOR"
echo " $1"
echo "$SEPARATOR"
}
# Vérification des droits sudo
if [ "$EUID" -ne 0 ]; then
echo " Ce script doit être exécuté avec sudo"
echo " Utilisation : sudo ./main.sh"
exit 1
fi
print_step " Lancement du programme de configuration IoT"
print_step " Lancement du programme de configuration IoT"
sleep 1
# ----------------------------
# 1. Mise à jour du système
# ----------------------------
print_step " Mise à jour du système (apt update & upgrade)"
print_step " Mise à jour du système (apt update & upgrade)"
if ! apt update && apt upgrade -y; then
echo " Erreur lors de la mise à jour du système"
exit 1
fi
echo "Système mis à jour"
sleep 1
#----------------------------
# 2. Installation de MariaDB x phpmyadmin
#------------------------------
bash DB/main.sh
#-------------------------------
# 3. Exportation des DB
#--------------------------------
read -p "Voulez-vous exporter des DB existantes ? (y/n) : " choix
if [ "$choix" = "y" ]; then
bash "$(dirname "$0")/export_db.sh"
fi
echo 'je sais ya un problème de numéro mais wola aller lire le script db/export_db.sh je suis claquax au sol sur terre'
# ----------------------------
# 2. Installation de Python
# ----------------------------
print_step "Vérification / Installation de Python3"
if ! apt install python3 python3-pip python3-venv -y; then
echo "Erreur lors de l'installation de Python3"
exit 1
fi
PYTHON_VERSION=$(python3 --version 2>&1)
echo " $PYTHON_VERSION installé"
echo " $PYTHON_VERSION installé"
sleep 1
# ----------------------------
# 3. Recherche des venvs existants
# ----------------------------
print_step "Recherche des environnements virtuels (venv) existants..."
SEARCH_DIRS=("$(pwd)")
VENV_LIST=()
for dir in "${SEARCH_DIRS[@]}"; do
if [ -d "$dir" ]; then
# Un venv valide contient bin/activate et bin/python
while IFS= read -r -d '' activate_path; do
venv_dir=$(dirname "$(dirname "$activate_path")")
if [ -f "$venv_dir/bin/python" ]; then
VENV_LIST+=("$venv_dir")
fi
done < <(find "$dir" -name "activate" -path "*/bin/activate" 2>/dev/null -print0)
fi
done
echo ""
if [ ${#VENV_LIST[@]} -eq 0 ]; then
echo " Aucun environnement virtuel trouvé dans : $(pwd)"
else
echo "${#VENV_LIST[@]} environnement(s) virtuel(s) trouvé(s) :"
for i in "${!VENV_LIST[@]}"; do
venv="${VENV_LIST[$i]}"
python_ver=$("$venv/bin/python" --version 2>&1)
echo ""
echo " [$((i+1))] Chemin : $venv"
echo " Python : $python_ver"
echo " ▶ Activer : source $venv/bin/activate"
done
SELECTED_VENV="${VENV_LIST[0]}"
echo "$SELECTED_VENV" > ./.venv_path
echo ""
echo "Venv sélectionné et enregistré : $SELECTED_VENV"
fi
# ----------------------------
# 4. Créer un nouveau venv ?
# ----------------------------
print_step " Créer un nouvel environnement virtuel ?"
echo "Voulez-vous créer un nouveau venv ? (o/n)"
read -r CREATE_VENV
if [[ "$CREATE_VENV" =~ ^[oO]$ ]]; then
VENV_PATH="$SEARCH_DIRS/venv"
if python3 -m venv $SEARCH_DIRS/venv; then
echo ""
echo "Venv créé avec succès !"
echo " Chemin : $VENV_PATH"
echo " ▶ Activer : source $VENV_PATH/bin/activate"
echo "$VENV_PATH" > ./.venv_path
echo "Chemin enregistré dans .venv_path"
"$VENV_PATH/bin/pip" install --upgrade pip
if [ -f "./requirements.txt" ]; then
echo "Installation des dépendances depuis requirements.txt..."
"$VENV_PATH/bin/pip" install -r ./requirements.txt
echo " Dépendances installées"
echo " Dépendances installées"
else
echo " Aucun requirements.txt trouvé, installation des dépendances ignorée"
echo " Aucun requirements.txt trouvé, installation des dépendances ignorée"
fi
else
echo " Erreur lors de la création du venv à : $VENV_PATH"
echo " Erreur lors de la création du venv à : $VENV_PATH"
exit 1
fi
else
echo " Création ignorée"
echo " Création ignorée"
fi
# ----------------------------
# Fin
# ----------------------------
print_step " Configuration terminée"
print_step " Configuration terminée"
echo ""
if [ -f "./.venv_path" ]; then
echo "Venv configuré : $(cat ./.venv_path)"
echo " Pour l'activer manuellement : source $(cat ./.venv_path)/bin/activate"
else
echo " Aucun venv enregistré — relancez le script et créez un venv"
fi
echo ""

View File

@@ -1,3 +1,5 @@
fastapi
uvicorn
rpi.gpio
rpi.gpio
python-tm1637
Adafruit_DHT

68
fastapi/run_api.sh Executable file
View File

@@ -0,0 +1,68 @@
#!/bin/bash
cat << 'EOF'
=============================
_______ ________ ___ ___ _______ ________
|\ ___ \ |\ __ \|\ \|\ \|\ ___ \ |\ ____\
\ \ __/|\ \ \|\ \ \ \\\ \ \ __/|\ \ \___|
\ \ \_|/_\ \ ____\ \ __ \ \ \_|/_\ \ \
\ \ \_|\ \ \ \___|\ \ \ \ \ \ \_|\ \ \ \____
\ \_______\ \__\ \ \__\ \__\ \_______\ \_______\
\|_______|\|__| \|__|\|__|\|_______|\|_______|
=============================
EOF
cat << 'EOF'
===============================
Vérification de la présence de python
=================================
EOF
VERSION_PYTHON=$(python3 --version 2>&1)
if [ $? -eq 0 ]; then
echo "Python est installé"
echo "Voici la version : $VERSION_PYTHON"
else
apt install -y python3
fi
cat << 'EOF'
===================================================
Vérification de la présence de la bibliothèque FLASK
====================================================
EOF
if venv/bin/python -m pip list | grep -qi 'flask'; then
echo "Flask existe bien"
else
echo "Flask n'est pas installé..."
echo "Lancement de l'installation..."
sleep 1
venv/bin/python -m pip install flask
fi
cat << 'EOF'
=================================
Vérification des certificats SSL
==================================
EOF
bash ../web_secu/ssl.sh
cat << 'EOF'
=============================
Vérification du daemin Avahi
============================
EOF
bash ../web_secu/avahi.sh
cat << 'EOF'
================================
Lancement du serveur FLASK
================================
EOF
sleep 1
touch /var/log/loustique.log
chown ${SUDO_USER}:${SUDO_USER} /var/log/loustique.log
venv/bin/python main