Une passerelle API permettant aux particuliers d'accéder à leurs données Linky via les API professionnelles Enedis.
Les API Enedis sont réservées aux professionnels disposant d'un SIRET. MyElectricalData agit comme une passerelle sécurisée permettant aux particuliers d'accéder à leurs propres données de consommation électrique.
- 🔐 Consentement Enedis au niveau compte : Un seul consentement pour accéder à tous vos PDL
- 🔄 Détection automatique des PDL : Vos points de livraison sont automatiquement récupérés après consentement
- 🔒 Cache chiffré : Données mises en cache avec chiffrement par
client_secretutilisateur - ⚡ Rate limiting : Respect des quotas Enedis (5 requêtes/seconde) + quotas utilisateurs
- 🛡️ Isolation totale : Chaque utilisateur n'accède qu'à ses propres données
- 📊 API complète : Miroir de tous les endpoints Enedis (consommation, production, contrat, etc.)
- 👨💼 Panel Admin : Gestion des utilisateurs, statistiques et reset de quotas
- 🔑 OAuth2 Client Credentials : Authentification sécurisée avec
client_id/client_secret - 🗄️ Multi-database : Support SQLite et PostgreSQL avec auto-détection
myelectricaldata_new/
├── apps/
│ ├── api/ # FastAPI backend
│ └── web/ # React + Vite frontend
└── docker-compose.yml
The easiest way to run the entire application is using Docker Compose.
- Docker
- Docker Compose
-
Configure environment variables:
cp .env.example .env # Edit .env with your configuration -
Build the containers:
docker compose build
-
Start the services:
docker compose up
Or run in detached mode:
docker compose up -d
-
Access the applications:
- API: http://localhost:8000
- API Documentation: http://localhost:8000/docs
- Web UI: http://localhost:3000
For production on https://myelectricaldata.fr:
-
Configure environment variables:
# Backend (.env) FRONTEND_URL=https://myelectricaldata.fr BACKEND_URL=https://myelectricaldata.fr/api ENEDIS_REDIRECT_URI=https://myelectricaldata.fr/oauth/callback ENEDIS_ENVIRONMENT=production DEBUG=false # Frontend (.env) VITE_API_BASE_URL=https://myelectricaldata.fr/api
-
Setup Nginx reverse proxy (see
nginx.conf.example):- Frontend: Serve React static files at
/ - Backend: Reverse proxy to FastAPI at
/api
- Frontend: Serve React static files at
-
SSL/TLS: Use Let's Encrypt for HTTPS certificates
-
Build frontend:
cd apps/web npm run build # Deploy dist/ to /var/www/myelectricaldata/web
-
Run backend:
cd apps/api uv run uvicorn src.main:app --host 127.0.0.1 --port 8000
- Création de compte : Inscription avec email/mot de passe
- Consentement Enedis : Clic sur "Consentement Enedis" depuis le tableau de bord
- Détection automatique : Tous les PDL du compte Enedis sont récupérés et créés automatiquement
- Accès aux données : Utilisation des identifiants API (
client_id/client_secret) pour récupérer les données
-
View logs:
docker compose logs -f
-
View logs for specific service:
docker compose logs -f api docker compose logs -f web
-
Stop the services:
docker compose down
-
Rebuild after changes:
docker compose up --build
-
Remove all containers and volumes:
docker compose down -v
Located in apps/api/. See apps/api/README.md for detailed documentation.
Located in apps/web/. See apps/web/README.md for detailed documentation.
Configuration is managed through environment variables. Copy .env.example to .env and adjust values as needed:
DATABASE_URL: URL de connexion à la base de données (SQLite ou PostgreSQL, auto-détecté)REDIS_URL: Valkey cache URL (Redis-compatible protocol)ENEDIS_CLIENT_ID: Client ID fourni par EnedisENEDIS_CLIENT_SECRET: Client secret fourni par EnedisENEDIS_ENVIRONMENT:sandboxouproductionENEDIS_REDIRECT_URI: URL de callback OAuth EnedisSECRET_KEY: Clé secrète pour JWTCACHE_TTL_SECONDS: Durée de vie du cache (défaut: 86400 = 24h)USER_DAILY_LIMIT_NO_CACHE: Quota journalier sans cache (défaut: 50)USER_DAILY_LIMIT_WITH_CACHE: Quota journalier avec cache (défaut: 1000)ADMIN_EMAILS: Adresses email des administrateurs (séparées par des virgules)FRONTEND_URL: URL du frontend (production: https://myelectricaldata.fr)BACKEND_URL: URL du backend (production: https://myelectricaldata.fr/api)
VITE_API_BASE_URL: URL de l'API backend- Production:
https://myelectricaldata.fr/api - Development:
http://localhost:8000
- Production:
- Isolation des données : Chaque utilisateur ne peut accéder qu'à ses propres PDL
- Vérification de propriété : Tous les endpoints vérifient que le PDL appartient à l'utilisateur
- Cache chiffré : Données chiffrées avec Fernet utilisant le
client_secretcomme clé - Tokens OAuth : Gestion automatique du refresh des tokens Enedis
- Cascade delete : Suppression compte → suppression PDL, tokens et cache
Voir SECURITY.md pour plus de détails.
- Docker Setup : Déploiement Docker complet avec Caddy
- Database Configuration : Configuration SQLite et PostgreSQL
- Dev Mode : Mode développement avec hot-reload
- Authentication : Guide d'authentification OAuth2 et quotas
- Admin Panel : Panel administrateur et gestion des utilisateurs
- Account Management : Gestion des comptes et authentification
- API Gateway : Passerelle API et consentement Enedis
- Cache System : Système de cache et rate limiting
- Database : Support multi-database (SQLite/PostgreSQL)
- Architecture Summary : Vue d'ensemble de l'architecture
- Design System : Guide de design des composants UI
- Demo Guide : Guide complet pour créer un compte démo
- Demo Architecture : Architecture détaillée du système de démo
- Demo Implementation : Guide d'implémentation étape par étape
- Enedis API Documentation : Documentation des API Enedis
- API Security : Sécurité et isolation des données
- API Documentation : Swagger UI disponible à
/docsavec support OAuth2 Client Credentials
Both services include health checks:
- API health:
curl http://localhost:8000/ping - Web health:
curl http://localhost:3000