Application Flutter de suivi et gestion de consommation énergétique avec objets connectés.
| Couche | Technologie |
|---|---|
| App | Flutter (latest stable) |
| State | Riverpod + Provider |
| Auth | Supabase Auth |
| Base de données | Supabase PostgreSQL |
| IoT | MQTT 5.0 (TCP TLS/WSS) via mqtt5_client (app subscribe telemetry/status; worker publie commandes via device_commands) |
| IA | Agent‑orchestrator (Azure OpenAI GPT‑4o / Phi‑4‑mini‑instruct) avec RAG pgvector, streaming SSE, policy engine et file d’attente de commandes MQTT |
| Architecture | Clean Architecture (core/data/domain/presentation) |
| Requirement | Version | Notes |
|---|---|---|
| Flutter | latest stable | Install from https://flutter.dev |
| Dart SDK | ^3.7.0 | Defined in pubspec.yaml |
| Supabase | ^2.8.4 | Account required for credentials |
- Target platforms: Android, iOS, Web, Windows, macOS
- Minimum Android SDK: 21 (Android 5.0)
- Target iOS: 12.0+
- Development: Windows, macOS, or Linux
| Dependency | Purpose |
|---|---|
supabase_flutter |
Authentication, realtime, PostgreSQL |
mqtt_client |
IoT device communication (MQTT) |
flutter_riverpod |
State management |
get_it + dartz |
DI container + functional error handling |
flutter_secure_storage |
Secure token storage |
shared_preferences |
Non-sensitive session cache |
fl_chart / syncfusion_flutter_charts |
Energy consumption charts |
google_fonts |
DM Sans typography |
lottie |
Animations |
flutter_local_notifications |
Push and local notifications |
The following environment variables are required at compile time via --dart-define:
| Variable | Description |
|---|---|
SUPABASE_URL |
Supabase project URL |
SUPABASE_ANON_KEY |
Supabase anonymous API key |
Security: Never commit credentials to source code. Use
--dart-defineflags only.
Le projet a évolué vers une architecture multi-utilisateurs avec :
- Rôles : Admin / Utilisateur standard / VIP
- Périmètres stricts : Chaque utilisateur possède ses boîtiers, isolation totale
- Abonnements : Système de licence FREE/VIP
- Synchronisation : Paire unique boîtier ↔ utilisateur via UID matériel
- Provisionnement admin : Création boîtiers + appareils depuis dashboard admin (plus de CRUD utilisateur)
- Pipeline stats : Edge Function
energy-aggregator+LiveConsumptionIndicatorpour conso temps réel - Toggle IoT : Toute commande appareil passe par
device_commands(file d'attente worker MQTT5) - Nouvelle BDD : Tables
licences,subscriptions,sync_logs,admin_actions,roles, migrations20260623000001(agent) et20260626000003(admin)
Voir AGENTS.md pour les détails techniques et commandes.
flutter pub get
flutter run --dart-define=SUPABASE_URL=... --dart-define=SUPABASE_ANON_KEY=...Ou configuration via variable d'environnement :
$env:SUPABASE_URL = "https://xxxxxxxxxxxxxx.supabase.co"
$env:SUPABASE_ANON_KEY = "xxxxxxxxxx"
flutter runSplash → Onboarding → Auth (Login/Signup) → Dashboard
- Dashboard : température, humidité, consommation temps réel (MQTT), conso live par appareil, conseils économie
- Statistiques : historique, tendances, conso live en haut de page
- Appareils : lecture seule, toggle via
device_commands(admin crée les boîtiers depuis le dashboard admin) - Paramètres : thème, état MQTT, liste appareils, bouton « Donner un avis » (formulaire de retours utilisateurs)
- Chatbot : agent‑orchestrator (Azure OpenAI GPT‑4o / Phi‑4‑mini‑instruct) avec streaming SSE
- Administration : gestion utilisateurs, boîtiers, licences, création de boîtiers + 3 appareils (admin only)
Voir CONTRIBUTING.md pour les conventions de code, commits, branches et le processus de pull request.
Voir VERSION.md.
Voir SECURITY.md pour les standards de sécurité et la procédure de signalement de vulnérabilités.
Distribué sous licence MIT. Voir LICENSE.
Projet académique ETSIA — Partenariat professionnel Bedouen KANKEU.