Mise à jour
This commit is contained in:
375
README.md
375
README.md
@@ -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
|
||||
Reference in New Issue
Block a user