Ce projet est un backend REST API développé en Java pour la gestion d'un système de réseau électrique intelligent (Smart Grid). Il permet de surveiller et gérer la production et la consommation d'énergie à travers différents capteurs (panneaux solaires, éoliennes, chargeurs de véhicules électriques).
Le système collecte des données en temps réel depuis des capteurs IoT via HTTP et UDP, les stocke dans une base de données PostgreSQL et expose une API REST pour l'interrogation et la gestion des données.
- Java 21 - Langage de programmation
- Vert.x 4.5.7 - Framework réactif pour construire l'API REST
- Jakarta Persistence API (JPA) 3.2 - ORM pour la gestion de la persistance
- EclipseLink 4.0.2 - Implémentation JPA
- PostgreSQL 42.7.3 - Base de données relationnelle
- Jackson 2.17.0 - Parsing JSON
- Gradle 8.7 - Outil de build
Le système utilise une hiérarchie d'entités JPA :
- Grid : Représente un réseau électrique
- Person : Utilisateurs du système avec leurs capteurs
- Sensor : Classe abstraite pour tous les capteurs
- Producer : Capteurs de production d'énergie
- SolarPanel : Panneaux solaires
- WindTurbine : Éoliennes
- Consumer : Capteurs de consommation d'énergie
- EVCharger : Chargeurs de véhicules électriques
- Producer : Capteurs de production d'énergie
- Measurement : Mesures associées aux capteurs
- DataPoint : Points de données temporels pour chaque mesure
- Java 21 ou supérieur
- Docker et Docker Compose (pour la base de données et les services)
- Gradle 8.7 ou supérieur
- Cloner le dépôt
git clone https://github.com/TeodoreAutuly/Backend-Java.git
cd Backend-Java- Démarrer les services avec Docker Compose
docker-compose up -dCela démarre :
- Base de données PostgreSQL (port 5432)
- Adminer pour l'administration de la base de données (port 8081)
- Frontend de visualisation (port 8082)
- Simulateur d'éolienne
- Simulateur de panneau solaire
- Compiler et lancer le backend
./gradlew build
./gradlew runLe serveur démarre sur le port 8080.
La configuration de connexion se trouve dans src/main/resources/META-INF/persistence.xml :
<property name="jakarta.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/test"/>
<property name="jakarta.persistence.jdbc.user" value="test"/>
<property name="jakarta.persistence.jdbc.password" value="test"/>Le schéma de base de données est initialisé automatiquement via init_database.sql.
| Endpoint | Description |
|---|---|
GET /hello |
Endpoint de test |
GET /grids |
Liste tous les réseaux électriques |
GET /persons |
Liste toutes les personnes |
GET /sensors |
Liste tous les capteurs |
GET /sensors/:kind |
Liste les capteurs d'un type spécifique |
GET /consumers |
Liste tous les consommateurs |
GET /producers |
Liste tous les producteurs |
| Endpoint | Description |
|---|---|
GET /grid/:id |
Détails d'un réseau |
GET /grid/:id/production |
Production totale d'un réseau |
GET /grid/:id/consumption |
Consommation totale d'un réseau |
GET /sensor/:id |
Détails d'un capteur |
GET /person/:id |
Détails d'une personne |
GET /measurement/:id |
Détails d'une mesure |
GET /measurement/:id/values |
Valeurs d'une mesure |
| Endpoint | Description |
|---|---|
POST /person/:id |
Créer une nouvelle personne |
POST /sensor/:id |
Créer un nouveau capteur |
POST /ingress/windturbine |
Recevoir des données d'éolienne |
{
"windturbine": 1,
"timestamp": 1741334062,
"data": {
"speed": 123.4,
"power": 123.4
}
}Réponse en cas de succès :
{
"status": "success"
}| Endpoint | Description |
|---|---|
PUT /person/ |
Mettre à jour une personne |
| Endpoint | Description |
|---|---|
DELETE /person/:id |
Supprimer une personne |
Le système écoute également sur le port 12345 en UDP pour recevoir les données des panneaux solaires.
Format des données : id:temperature:power:timestamp
Exemple : 2:25.4:523.6:1741334062
Backend-Java/
├── src/
│ └── main/
│ ├── java/
│ │ └── fr/imta/smartgrid/
│ │ ├── model/ # Entités JPA
│ │ └── server/ # Serveur et handlers
│ │ ├── DeleteHandlers/
│ │ ├── GetHandlers/
│ │ ├── GetListHandlers/
│ │ ├── PostHandlers/
│ │ └── PutHandlers/
│ └── resources/
│ └── META-INF/
│ └── persistence.xml # Configuration JPA
├── build.gradle # Configuration Gradle
├── docker-compose.yml # Services Docker
├── init_database.sql # Schéma de base de données
└── backend_routes.md # Documentation des routes
./gradlew build./gradlew test./gradlew cleanLe fichier docker-compose.yml fournit :
- db : PostgreSQL
- adminer : Interface web pour gérer la base de données (http://localhost:8081)
- front : Application frontend de visualisation (http://localhost:8082)
- windturbine : Simulateur d'éolienne
- solar_panel : Simulateur de panneau solaire
- API Backend : http://localhost:8080
- Adminer (DB Admin) : http://localhost:8081
- Frontend : http://localhost:8082
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
- Téodore Autuly
- Julien Orsoni