Skip to content

TeodoreAutuly/Backend-Java

Repository files navigation

Backend Java - Smart Grid Management System

📋 Description

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.

🏗️ Architecture

Technologies utilisé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

Modèle de données

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
  • Measurement : Mesures associées aux capteurs
  • DataPoint : Points de données temporels pour chaque mesure

🚀 Installation et démarrage

Prérequis

  • Java 21 ou supérieur
  • Docker et Docker Compose (pour la base de données et les services)
  • Gradle 8.7 ou supérieur

Démarrage rapide

  1. Cloner le dépôt
git clone https://github.com/TeodoreAutuly/Backend-Java.git
cd Backend-Java
  1. Démarrer les services avec Docker Compose
docker-compose up -d

Cela 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
  1. Compiler et lancer le backend
./gradlew build
./gradlew run

Le serveur démarre sur le port 8080.

Configuration de la base de données

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.

📡 API REST

Routes GET - Liste des objets

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

Routes GET - Objets individuels

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

Routes POST - Création et ingestion

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

Exemple : POST /ingress/windturbine

{
    "windturbine": 1,
    "timestamp": 1741334062,
    "data": {
        "speed": 123.4,
        "power": 123.4
    }
}

Réponse en cas de succès :

{
    "status": "success"
}

Routes PUT - Mise à jour

Endpoint Description
PUT /person/ Mettre à jour une personne

Routes DELETE

Endpoint Description
DELETE /person/:id Supprimer une personne

Ingestion UDP

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

📦 Structure du projet

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

🔧 Développement

Build du projet

./gradlew build

Exécution des tests

./gradlew test

Nettoyage

./gradlew clean

🐳 Services Docker

Le 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

📊 Accès aux interfaces

📝 License

Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.

👥 Contributeurs

  • Téodore Autuly
  • Julien Orsoni

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages