This commit is contained in:
2026-03-30 23:17:08 +02:00
parent 703f7df12f
commit bb566f7da2
9 changed files with 41 additions and 161 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
web_secu/ssl

View File

@@ -1,10 +1,12 @@
import Adafruit_DHT as dht import Adafruit_DHT as dht
import time as t import time as t
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
capteur = dht.DHT11 capteur = dht.DHT11
pin = 22 pin = 22
while True: def lire_temperature():
humidite, temperature = dht.read_retry(capteur, pin) humidite, temperature = dht.read_retry(capteur, pin)
if temperature is not None: if temperature is not None:

View File

@@ -1,22 +1,16 @@
import tm1637 import tm1637
import time as t import time as t
# attention : mode BOARD
display = tm1637.TM1637(clk=4, dio=17) display = tm1637.TM1637(clk=4, dio=17)
display.brightness(2)
display.brightness = 5
def afficher_temperature(temperature): def afficher_temperature(temperature):
print("Test affichage...") print(f"Test affichage: {temperature}")
try: try:
while True: temp_entiere = int(temperature)
display.show(temperature) texte_ecran = f"{temp_entiere} C"
print(temperature) display.show(texte_ecran)
t.sleep(2)
except Exception as e:
except KeyboardInterrupt: print(f"Erreur d'affichage : {e}")
display.show("----")
print("Stop")

View File

@@ -9,7 +9,7 @@ GPIO.setwarnings(False)
class SystemeThermostat: class SystemeThermostat:
def __init__(self): def __init__(self):
self.capteur = Adafruit_DHT.DHT11 self.capteur = Adafruit_DHT.DHT11
self.pinDht = 22 self.pinDht = 25
self.boutonPlus = 16 self.boutonPlus = 16
self.boutonMoins = 18 self.boutonMoins = 18

View File

@@ -1,23 +0,0 @@
import tm1637
import time as t
# attention : mode BOARD
display = tm1637.TM1637(clk=7, dio=11)
display.brightness(2)
print("Test affichage...")
try:
while True:
display.show("1234")
print("1234")
t.sleep(2)
display.show("0000")
print("0000")
t.sleep(2)
except KeyboardInterrupt:
display.show("----")
print("Stop")

View File

@@ -1,102 +0,0 @@
# README
## Description
Ce serveur **FastAPI** est destiné à être déployé sur le **deuxième Raspberry Pi** de larchitecture.
Son rôle principal est de **gérer et traiter toutes les requêtes envoyées par le Raspberry Pi 1**, afin de centraliser la logique de traitement et dassurer une communication fluide entre les deux الأجهزة.
---
## Architecture
* **Raspberry Pi 1**
* Envoie les requêtes (HTTP/API)
* Sert de client / déclencheur
* **Raspberry Pi 2 (ce serveur)**
* Héberge le serveur FastAPI
* Reçoit, traite et répond aux requêtes
* Exécute la logique métier
---
## Installation
Pour garantir une installation propre et optimale, il est recommandé dutiliser le script fourni.
### 1. Cloner le projet
```bash
git clone <repo_url>
cd <repo>
```
### 2. Lancer linstallation automatique
Le script `main.sh` permet de :
* créer un environnement virtuel Python (`venv`)
* installer toutes les dépendances nécessaires
* configurer lenvironnement correctement
```bash
chmod +x main.sh
./main.sh
```
---
## Environnement virtuel
Le projet utilise **Python venv** pour isoler les dépendances.
Si besoin, activation manuelle :
```bash
source venv/bin/activate
```
---
## Dépendances
Les dépendances sont listées dans le fichier :
```
requirements.txt
```
Elles sont automatiquement installées via le script `main.sh`.
---
## Lancement du serveur
Une fois linstallation terminée, le serveur peut être lancé avec :
```bash
uvicorn main:app --host 0.0.0.0 --port 8000
```
---
## Objectif
Ce serveur a pour objectif de :
* centraliser le traitement des requêtes
* améliorer les performances globales du système
* permettre une architecture distribuée entre plusieurs Raspberry Pi
---
## Notes
* Assurez-vous que les deux Raspberry Pi sont sur le même réseau.
* Vérifiez les ports et adresses IP pour permettre la communication entre les deux machines.
* Adapter la configuration si nécessaire selon votre environnement.
---

View File

@@ -1,6 +1,10 @@
import os import os
import sys import sys
from fastapi import FastAPI from fastapi import FastAPI
import RPi.GPIO as GPIO # <-- CORRIGÉ : "import" au lieu de "from"
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
composants = os.path.join(BASE_DIR, "composants", "byPanda") composants = os.path.join(BASE_DIR, "composants", "byPanda")
@@ -9,7 +13,7 @@ sys.path.insert(0, composants)
from lumieres import SystemeLumieres from lumieres import SystemeLumieres
from thermostat import SystemeThermostat from thermostat import SystemeThermostat
from volets import SystemeVolets from volets import SystemeVolets
from septsegments import afficher_temperature from septsegments import afficher_temperature # <-- CORRIGÉ : On a enlevé le "#" !
app = FastAPI(title="Loustiques API - Pi 2") app = FastAPI(title="Loustiques API - Pi 2")
@@ -34,21 +38,11 @@ async def read_temp():
temp = controleur_thermostat.lireTemperature() temp = controleur_thermostat.lireTemperature()
if temp is None: if temp is None:
return {"success": False, "message": "Impossible de lire le capteur DHT11"} return {"success": False, "message": "Impossible de lire le capteur DHT11"}
afficher_temperature(temp) afficher_temperature(temp)
return {"success": True, "temperature": temp} return {"success": True, "temperature": temp}
"""
@app.get("/open_volet")
async def open_volet():
volet = controleur_volet.ouvrirVolets()
if volet is None:
return {"success": False, "message": "Impossible de lire le capteur DHT11"}
return {"success": True, "message" :"Volet ouvert par le raspberry 2"}
"""
if __name__ == "__main__": if __name__ == "__main__":
import uvicorn import uvicorn
uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True) uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)

View File

@@ -1,2 +1,3 @@
fastapi fastapi
uvicorn uvicorn
rpi.gpio

View File

@@ -324,18 +324,31 @@
} catch { } catch {
showToast("Erreur lors de l'appel alarme."); showToast("Erreur lors de l'appel alarme.");
} }
} async function call_led_down() {
async function callBoard1() {
try { try {
const res = await fetch('/board1', { const res = await fetch('http://pi32.local/down_led', {
method: 'POST', method: 'GET',
headers: { 'Content-Type': 'application/json' } headers: { 'Content-Type': 'application/json' }
}); });
showToast("board1 activée !"); showToast("led activée !");
} catch {
showToast("Erreur lors de l'appel board1.");
}}
}
async function call_led_up() {
try {
const res = await fetch('http://pi32.local/up_led', {
method: 'GET',
headers: { 'Content-Type': 'application/json' }
});
showToast("led activée !");
} catch { } catch {
showToast("Erreur lors de l'appel board1."); showToast("Erreur lors de l'appel board1.");
} }
} }
function go_admin() { function go_admin() {
window.location.href = "/admin"; window.location.href = "/admin";