.
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
web_secu/ssl
|
||||||
@@ -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:
|
||||||
@@ -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 KeyboardInterrupt:
|
except Exception as e:
|
||||||
display.show("----")
|
print(f"Erreur d'affichage : {e}")
|
||||||
print("Stop")
|
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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")
|
|
||||||
102
fastapi/Readme
102
fastapi/Readme
@@ -1,102 +0,0 @@
|
|||||||
# README
|
|
||||||
|
|
||||||
## Description
|
|
||||||
|
|
||||||
Ce serveur **FastAPI** est destiné à être déployé sur le **deuxième Raspberry Pi** de l’architecture.
|
|
||||||
|
|
||||||
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 d’assurer 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é d’utiliser le script fourni.
|
|
||||||
|
|
||||||
### 1. Cloner le projet
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone <repo_url>
|
|
||||||
cd <repo>
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Lancer l’installation automatique
|
|
||||||
|
|
||||||
Le script `main.sh` permet de :
|
|
||||||
|
|
||||||
* créer un environnement virtuel Python (`venv`)
|
|
||||||
* installer toutes les dépendances nécessaires
|
|
||||||
* configurer l’environnement 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 l’installation 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.
|
|
||||||
|
|
||||||
---
|
|
||||||
@@ -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)
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
fastapi
|
fastapi
|
||||||
uvicorn
|
uvicorn
|
||||||
|
rpi.gpio
|
||||||
@@ -324,19 +324,32 @@
|
|||||||
} 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";
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user