Mise à jour

This commit is contained in:
2026-06-03 14:47:35 +02:00
parent 085cf33114
commit ad0d86e734
16 changed files with 669 additions and 889 deletions

375
README.md
View File

@@ -1,208 +1,239 @@
# 🅿️ Smart Parking
# Smart Parking
> Système complet de gestion de parking intelligent avec authentification, réservation et paiement QR code
Systeme de gestion et de surveillance de parking automatise avec detection en temps reel par capteurs infrarouges, reservation en ligne et administration complete.
## 📋 Fonctionnalités
Projet BTS CIEL IR — APON BARUA — Groupe scolaire La Salle Saint-Denis — 2025/2026
### 🔐 Authentification
- Inscription avec nom, email, téléphone et mot de passe
- Connexion sécurisée
- Gestion de profil
- Deux rôles : Client et Administrateur
## Fonctionnalites
### 🗺️ Carte du Parking
- **10 places** visuelles (modifiable par l'admin)
- 3 états : Libre ✅, Occupée 🚗, Réservée 📅
- Mise à jour en temps réel
- Détails de chaque place au clic
### Authentification
- Inscription et connexion securisees
- Mots de passe haches avec BCrypt
- Authentification par token JWT (expire apres 24h)
- Deux roles : Client et Administrateur
### 📅 Système de Réservation
- Sélection de la place
- Choix de la date et heure
- Durée : 30min, 1h, 2h, 4h, Journée
### Carte du Parking
- Affichage en temps reel de l'etat des places
- 3 etats : Libre, Occupee, Reservee
- Mise a jour automatique toutes les 3 secondes
- Details de chaque place au clic
### Detection automatique
- Capteurs infrarouges IR LM393 sur chaque place
- ESP32 connecte en WiFi au Raspberry Pi
- Communication MQTT vers le serveur
- Changement d'etat instantane sur le site
### Systeme de Reservation
- Selection de la place, date, heure et duree
- Verification des conflits d'horaire
- Saisie de la plaque d'immatriculation
- Expiration automatique des reservations
### 💳 Paiement QR Code
- Génération de QR code unique
- Code de paiement affiché
- Confirmation du paiement
### Panel Administrateur
- Statistiques globales du parking
- Gestion de l'etat de chaque place (1 a 20 places)
- Liste des utilisateurs avec suppression
- Gestion des reservations (terminer, annuler)
- Historique complet des actions
### 👤 Espace Client
- Consulter la carte des places
- Voir les tarifs
- Faire une réservation
- Voir l'historique des réservations
- Gérer son profil
## Tarifs
### ⚙️ Panel Admin
- Voir toutes les statistiques
- Modifier le nombre de places
- Gérer l'état de chaque place
- Voir tous les utilisateurs
- Voir toutes les réservations
- Annuler/terminer des réservations
- Voir l'historique complet
## 💰 Tarifs
| Durée | Prix |
| Duree | Prix |
|-------|------|
| 30 minutes | 2€ |
| 1 heure | 3€ |
| 2 heures | 5€ |
| 4 heures | 8€ |
| Journée (8h) | 15€ |
| Journee (8h) | 15€ |
## 🚀 Installation
### Prérequis
- Node.js 18+
- npm
### Étape 1 : Installer les dépendances
```bash
cd server
npm install
```
### Étape 2 : Démarrer le serveur
```bash
npm start
```
Pour le développement (avec redémarrage automatique) :
```bash
npm run dev
```
### Étape 3 : Accéder au site
Ouvrir un navigateur et aller sur :
```
http://localhost:3000
```
## 🔑 Compte par défaut
**Administrateur :**
- Email : `admin@smartparking.fr`
- Mot de passe : `admin123`
## 📁 Structure du projet
## Architecture technique
```
smart-parking/
├── index.html # Page de connexion/inscription
├── css/
│ ├── style.css # Styles globaux
│ ├── auth.css # Styles authentification
│ └── dashboard.css # Styles dashboard
├── js/
│ ├── auth.js # Gestion authentification
│ ├── dashboard.js # Gestion dashboard
│ ├── map.js # Carte des places
│ ├── reservation.js # Système de réservation
│ └── admin.js # Panel admin
├── pages/
│ └── dashboard.html # Dashboard principal
├── server/
│ ├── package.json # Dépendances Node.js
│ ├── server.js # Serveur principal
│ ├── db/
│ │ └── database.js # Gestion SQLite
│ ├── middleware/
│ │ └── auth.js # Middleware JWT
│ └── routes/
│ └── api.js # Routes API
└── README.md # Ce fichier
[Voiture] → [Capteur IR LM393] → [ESP32 WiFi] → [MQTT] → [Mosquitto]
→ [Node.js] → [MariaDB] → [API REST] → [Site web]
```
## 🔌 API REST
### Materiel
| Composant | Reference | Quantite |
|-----------|-----------|----------|
| Microcontroleur WiFi | ESP32 Freenove WROVER | 1 |
| Capteur infrarouge | Module IR LM393 | 3 |
| Serveur central | Raspberry Pi 4 | 1 |
| Cables | Dupont F-F et F-M | Plusieurs |
### Authentification
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| POST | `/api/register` | Inscription |
| POST | `/api/login` | Connexion |
### Configuration reseau
| Interface | Adresse IP | Utilisation |
|-----------|-----------|-------------|
| Ethernet | 172.16.60.40 | Reseau ecole |
| WiFi (hotspot) | 172.20.10.2 | Communication ESP32 |
| Docker bridge | 172.18.0.1 | Reseau interne Docker |
### Utilisateurs
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| GET | `/api/users` | Liste des utilisateurs (admin) |
| DELETE | `/api/users/:id` | Supprimer un utilisateur (admin) |
### Ports
| Service | Port |
|---------|------|
| Node.js (HTTP) | 3000 |
| MariaDB | 3306 |
| Mosquitto (MQTT) | 1883 |
### Places
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| GET | `/api/spots` | Liste des places |
| PUT | `/api/spots/:id/status` | Modifier le statut |
| POST | `/api/spots/init` | Réinitialiser les places (admin) |
## Technologies utilisees
### Réservations
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| GET | `/api/reservations` | Mes réservations |
| GET | `/api/reservations/all` | Toutes les réservations (admin) |
| POST | `/api/reservations` | Créer une réservation |
| PUT | `/api/reservations/:id/cancel` | Annuler une réservation |
### Statistiques
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| GET | `/api/stats` | Statistiques du parking |
| GET | `/api/history` | Historique (admin) |
## 🛠️ Technologies utilisées
### Frontend
- HTML5
- CSS3 (responsive)
- JavaScript vanilla
- Chart.js (graphiques)
- QRCode.js (génération QR)
### Hardware
- ESP32 Freenove WROVER (WiFi + GPIO)
- Capteurs IR LM393 (GPIO 15, 4, 12)
- Raspberry Pi 4 (serveur central)
### Backend
- Node.js
- Express.js
- SQLite3
- Node.js + Express.js
- MariaDB (base de donnees relationnelle)
- Mosquitto (broker MQTT)
- Docker + Docker Compose (conteneurisation)
- JWT (authentification)
- bcryptjs (hashage mots de passe)
- BCrypt (hachage mots de passe)
## 📱 Fonctionnement
### Frontend
- HTML5 / CSS3 / JavaScript (sans framework)
- Design responsive (PC et mobile)
### Pour les clients :
1. Créer un compte ou se connecter
2. Consulter la carte des places disponibles
3. Choisir une place libre
4. Sélectionner date, heure et durée
5. Scanner le QR code pour payer
6. La place est réservée !
### Outils
- Arduino IDE (programmation ESP32)
- Gitea + GitHub (versioning)
- Draw.io (schemas)
### Pour l'administrateur :
1. Se connecter avec le compte admin
2. Accéder au panel Admin
3. Voir toutes les statistiques
4. Gérer les places (cliquer pour changer l'état)
5. Modifier le nombre total de places
6. Gérer les utilisateurs et réservations
## Structure du projet
## 🔒 Sécurité
```
Parking/
├── index.html
├── css/
│ ├── style.css
│ ├── auth.css
│ └── dashboard.css
├── js/
│ ├── auth.js
│ ├── dashboard.js
│ ├── map.js
│ ├── reservation.js
│ └── admin.js
├── pages/
│ └── dashboard.html
├── server/
│ ├── server.js
│ ├── package.json
│ ├── db/
│ │ └── database.js
│ ├── middleware/
│ │ └── auth.js
│ └── routes/
│ └── api.js
├── init.sql
├── Dockerfile
├── docker-compose.yml
├── mosquitto.conf
└── README.md
```
- Mots de passe hashés avec bcrypt
- Authentification JWT
- Protection des routes sensibles
- Validation des données
## API REST
## 📝 Notes
### Authentification
| Methode | Endpoint | Description |
|---------|----------|-------------|
| POST | /api/register | Creer un compte |
| POST | /api/login | Se connecter |
- Les données sont stockées dans SQLite (`server/db/smart-parking.db`)
- Le système fonctionne aussi en mode offline (stockage local)
- La simulation automatique change l'état des places toutes les 5 secondes
### Utilisateurs
| Methode | Endpoint | Description |
|---------|----------|-------------|
| GET | /api/users | Liste des utilisateurs (admin) |
| PUT | /api/users/profile | Modifier mon profil |
| DELETE | /api/users/:id | Supprimer un utilisateur (admin) |
### Places
| Methode | Endpoint | Description |
|---------|----------|-------------|
| GET | /api/spots | Liste des places |
| PUT | /api/spots/:id/status | Modifier le statut |
| POST | /api/spots/init | Reinitialiser les places (admin) |
### Reservations
| Methode | Endpoint | Description |
|---------|----------|-------------|
| GET | /api/reservations | Mes reservations |
| GET | /api/reservations/all | Toutes les reservations (admin) |
| POST | /api/reservations | Creer une reservation |
| PUT | /api/reservations/:id/cancel | Annuler une reservation |
| PUT | /api/reservations/:id/complete | Terminer une reservation (admin) |
### Statistiques
| Methode | Endpoint | Description |
|---------|----------|-------------|
| GET | /api/stats | Statistiques du parking |
| GET | /api/history | Historique (admin) |
## Base de donnees (6 tables)
| Table | Description |
|-------|-------------|
| users | Comptes utilisateurs (id, name, email, password, role) |
| spots | Places de parking (id, number, status, sensor_id) |
| reservations | Reservations (user_id, spot_id, date, start_time, end_time, vehicle, price) |
| history | Historique des actions (action, details, user_id, timestamp) |
| stats | Statistiques periodiques (occupation, taux) |
| mqtt_events | Messages MQTT recus (topic, message, received_at) |
## Installation et demarrage
### 1. Demarrer le hotspot WiFi sur le telephone
### 2. Sur le Raspberry Pi
```bash
sudo systemctl start mosquitto
sudo iptables -I INPUT -s 172.18.0.0/16 -p tcp --dport 1883 -j ACCEPT
sudo iptables -I INPUT -s 172.17.0.0/16 -p tcp --dport 1883 -j ACCEPT
cd /home/aponlucas/Parking
docker compose up -d
```
### 3. Televerser le code ESP32
Ouvrir Arduino IDE, selectionner ESP32 Wrover Module, televerser le code.
### 4. Acceder au site
```
http://172.20.10.2:3000
```
## Compte administrateur par defaut
- Email : admin@smartparking.fr
- Mot de passe : admin123
## Securite
- Mots de passe haches avec BCrypt (10 rounds)
- Authentification JWT avec expiration 24h
- Middleware de verification sur toutes les routes protegees
- Fichier .env non versionne (secrets exclus de GitHub)
- Regles iptables pour le pare-feu Linux
## Chiffres cles
| Metrique | Valeur |
|----------|--------|
| Lignes de code | ~3 900 |
| Fichiers | 17 |
| Langages | JavaScript, HTML, CSS, C++, SQL |
| Endpoints API | 12 |
| Tables MariaDB | 6 |
| Delai de mise a jour | Moins de 3 secondes |
## Equipe
| Membre | Role |
|--------|------|
| APON BARUA | IoT, Web, Backend, BDD, Docker, Securite |
| Lucas | Electronique, Arduino, Barrieres, Schemas |
| Mahmoud | Camera de surveillance |
---
<p align="center">
🅿️ <strong>Smart Parking - BTS CIEL IR 2025</strong> 🅿️
</p>
Smart Parking — BTS CIEL IR — APON BARUA — 2025/2026