← ChangeLog | Sommaire | Suivant : Guide matériel →
1. Vue d'ensemble de l'application
1.1 Objectif
ACRouter est un contrôleur open source permettant de rediriger automatiquement l'excédent d'énergie solaire vers des charges résistives (comme les chauffe-eau) au lieu de l'exporter vers le réseau. Il optimise également la consommation d'énergie pendant les périodes tarifaires heures pleines et heures creuses avec des limites de consommation.
Objectif principal : Minimiser l'export d'énergie vers le réseau en contrôlant dynamiquement la puissance de la charge en fonction du bilan courant entre production et consommation. Réduire les coûts de consommation d'électricité du réseau.
Avantages principaux :
- ✅ Gestion automatique de l'excédent d'énergie solaire
- ✅ Optimisation des tarifs heures creuses et des limites de consommation
- ✅ Réduction des coûts d'électricité (autoconsommation)
- ✅ Coûts d'équipement réduits. Pas de batteries nécessaires pour le stockage d'énergie
- ✅ Protection contre l'export (mode ECO)
- ✅ Configuration flexible via interface web
- ✅ Plusieurs modes de fonctionnement supportés
- ✅ Contrôle de plusieurs appareils de consommation. Variateurs et relais.
- ✅ Code source ouvert
1.2 Fonctionnalités
Mesure et surveillance
- Mesure de la tension du réseau (capteur de tension AC ZMPT107)
- Mesure du courant en 3 points (capteurs de courant SCT-013/ACS-712) :
- Courant de charge (Charge)
- Courant du réseau (Réseau) - détection import/export
- Courant de production solaire (Solaire)
- Calcul de la puissance active en temps réel
- Fréquence de mise à jour : 200 ms (5 fois par seconde)
- Précision de mesure : ADC 12 bits avec DMA (jusqu'à 80 kHz sur 8 canaux)
Contrôle de charge
- Commande de variateur à angle de phase (variateur TRIAC)
- Réglage progressif de la puissance 0–100 %
- Synchronisation avec le détecteur de passage par zéro
- Support de jusqu'à 2 canaux de variateur, extensible aux GPIO disponibles
- Sorties relais (ROADMAP : Développement Phase 2)
- 2 relais indépendants, extensible aux GPIO disponibles
- Polarité programmable (Active HIGH/LOW)
Algorithmes de contrôle
- Contrôleur proportionnel (contrôleur P)
- Équilibrage P_grid → 0
- Coefficient de gain ajustable (Kp)
- Modes de fonctionnement : OFF, AUTO, ECO, OFFGRID, MANUAL, BOOST
- Anti-scintillement - lissage des changements du variateur
Communication
- WiFi : Mode AP (192.168.4.1) + mode STA (connexion au routeur)
- WebServer : REST API + interface Material UI
- Console série : Ligne de commande pour la configuration (115200 baud)
- Mises à jour OTA : Mises à jour firmware par voie hertzienne (Phase 2)
Configuration et stockage
- NVS (Non-Volatile Storage) :
- Paramètres ACRouter (mode, Kp, consigne)
- Configuration WiFi (SSID, mot de passe)
- Configuration matérielle (broches GPIO, types de capteurs)
- Interface web :
- Tableau de bord avec métriques en temps réel
- Page de paramètres WiFi
- Page de configuration matérielle
- Sélection du mode de fonctionnement
- Terminal série (console) :
- Affichage des métriques en temps réel
- Ligne de commande pour la configuration du matériel et des paramètres de l'appareil
- Sélection du mode de fonctionnement
1.3 Fonctionnement
Contrôle automatique
- Mesure de puissance :
- La tension et les courants sont mesurés toutes les 200 ms
- Calcul de la valeur efficace (RMS - Root Mean Square)
-
Calcul de la puissance active (P = U × I × cos φ)
-
Détermination du bilan :
- P_solar = puissance des panneaux solaires
- P_load = consommation actuelle de la maison
- P_grid = import/export vers le réseau
-
P_dimmer = puissance de la charge contrôlée
-
Algorithme de contrôle :
- Objectif : P_grid → 0 (zéro export/import)
- Contrôleur proportionnel : ΔDimmer = Kp × P_grid
- Appliqué au variateur avec des limites de 0–100 %
Surveillance via interface web
- Métriques en temps réel :
- Tension du réseau (V)
- Courants : Réseau, Solaire, Charge (A)
- Puissance : Réseau, Solaire, Charge, Variateur (W)
- Niveau du variateur (%)
-
Mode de fonctionnement actuel
-
Informations système :
- Version du firmware
- Temps de fonctionnement
- Mémoire heap (RAM libre)
- WiFi RSSI (niveau du signal)
Configuration via interface web
- Sélection du mode de fonctionnement (6 boutons)
- Contrôle manuel du variateur (curseur 0–100 %)
- Configuration WiFi (scan des réseaux, connexion)
- Configuration des broches GPIO et des types de capteurs
- Calibrage des capteurs (multiplicateur, offset)
- Redémarrage de l'appareil
1.4 Modes de fonctionnement
OFF (0) - Désactivé
Description : Le variateur est complètement désactivé (0 %), le système est inactif.
Usage:
- Maintenance
- Load disconnection
- Sensor testing without control
Behavior:
- Dimmer level = 0%
- Measurements continue (200 ms)
- Web interface is available
- Serial commands work
AUTO (1) - Automatique (routeur solaire)
Description : Mode principal du routeur solaire. Équilibrage automatique de P_grid → 0.
Algorithme :
// Every 200 ms
P_error = P_grid; // Positive = import, negative = export
delta = Kp * P_error; // Proportional controller
dimmer_level += delta;
dimmer_level = constrain(dimmer_level, 0, 100);
Behavior:
- P_grid > 0 (import from grid) → Increase dimmer (more load)
- P_grid < 0 (export to grid) → Decrease dimmer (less load)
- P_grid ≈ 0 → Dimmer stabilized
Settings:
- Kp (gain) - gain coefficient (default: 0.05)
- Higher Kp = faster response, but possible oscillations
- Lower Kp = smoother, but slower
- setpoint - target P_grid value (usually 0 W)
Exemple :
Initial state:
P_solar = 2000 W
P_load = 500 W
P_grid = -1500 W (export!)
Dimmer = 0%
After 5 seconds (AUTO mode, Kp=0.05):
P_solar = 2000 W
P_load = 500 W
Dimmer = 75% (~1500 W to water heater)
P_grid = 0 W ✅ (balance achieved)
ECO (2) - Économie (anti-export)
Description : Empêche l'export vers le réseau. L'import est autorisé, mais l'export est interdit.
Algorithme :
if (P_grid < 0) { // Export to grid
// Decrease dimmer (reduce load)
delta = Kp * P_grid; // Negative delta
dimmer_level += delta;
} else {
// Import is allowed, do not increase dimmer
// Keep current level
}
dimmer_level = constrain(dimmer_level, 0, 100);
Behavior:
- P_grid < 0 (export) → Decrease dimmer (avoid export)
- P_grid > 0 (import) → Do not change dimmer (import is allowed)
- P_grid = 0 → Dimmer is stable
Applications:
- Export tariff is unfavorable or absent
- Need to use only excess energy
- Export protection when there is no grid export contract
Exemple :
Situation 1: Solar excess
P_solar = 3000 W
P_load = 1000 W
P_grid = -500 W (export)
→ ECO mode will increase dimmer by ~500 W → P_grid = 0
Situation 2: Solar shortage
P_solar = 500 W
P_load = 1000 W
P_grid = +500 W (import)
→ ECO mode will NOT change dimmer (import is allowed)
OFFGRID (3) - Hors réseau
Description : Mode pour les systèmes autonomes avec batteries. Utilise l'excédent d'énergie solaire pour la charge.
Algorithme :
// Balance by solar panel current
P_available = P_solar - P_load; // Available power
if (P_available > 0) {
// There is solar excess → increase dimmer
dimmer_level = map(P_available, 0, P_dimmer_max, 0, 100);
} else {
// No excess → turn off dimmer (save battery)
dimmer_level = 0;
}
Behavior:
- Uses only solar energy
- Does not consider P_grid (no grid)
- Priority: main load → batteries → dimmer
- Dimmer works only when there is solar excess
Applications:
- Systems without grid connection
- Solar panels + batteries
- Maximize solar energy usage
Exemple :
Daytime (sunny):
P_solar = 1500 W
P_load = 800 W
P_available = 700 W
→ Dimmer = 50% (~700 W to water heater)
→ Battery is not discharging
Evening (no sun):
P_solar = 0 W
P_load = 800 W (from battery)
→ Dimmer = 0% (battery saving)
MANUAL (4) - Mode manuel
Description : Le variateur est réglé à un niveau fixe (pas d'automatisation).
Behavior:
- Dimmer level is set by user (0-100%)
- No automatic regulation
- Level is maintained until manually changed
Applications:
- Load testing
- Night tariff (set to 100%)
- Temperature control (set to 50%)
- System debugging
Settings:
- manual_level - dimmer level (0-100%)
Exemple :
# Via Serial commands
set-manual 75 # Set dimmer to 75%
set-mode 4 # Switch to MANUAL mode
# Via web interface
1. Select MANUAL mode
2. Move slider to 75%
3. Click "Apply"
BOOST (5) - Puissance maximale
Description : Variateur à 100 % (chauffage forcé).
Behavior:
- Dimmer level = 100% (constant)
- Ignores all sensors
- Maximum power to load
Applications:
- Fast water heater heating
- Using cheap tariff
- Emergency mode
Warnings:
- ⚠️ High grid consumption
- ⚠️ Possible load overheating
- ⚠️ Monitor temperature manually
Exemple :
Night tariff (23:00-07:00):
1. Switch to BOOST mode
2. Water heater heats at maximum
3. In the morning switch back to AUTO
Result:
Heating from cheap tariff
Daytime operation in AUTO mode (solar)
1.5 Tableau comparatif des modes
| Mode | Contrôle du variateur | Équilibrage P_grid | Import autorisé | Export autorisé | Cas d'utilisation |
|---|---|---|---|---|---|
| OFF | 0 % (fixe) | ❌ Non | N/A | N/A | Maintenance |
| AUTO | Automatique | ✅ Oui (→ 0) | ✅ Oui | ✅ Oui | Routeur solaire standard |
| ECO | Auto (anti-export) | ⚠️ Partiel | ✅ Oui | ❌ Non | Pas de contrat d'export |
| OFFGRID | Auto (solaire uniquement) | ❌ Non | N/A | N/A | Systèmes hors réseau |
| MANUAL | Fixe (utilisateur) | ❌ Non | ✅ Oui | ✅ Oui | Test / Tarif de nuit |
| BOOST | 100 % (fixe) | ❌ Non | ✅ Oui | ❌ Non | Chauffage rapide |
1.6 Scénarios d'utilisation
Scénario 1 : Routeur solaire standard
Equipment:
- 3 kW solar panels
- Sensors: Solar, Grid, Load, Voltage
- Load: 2 kW water heater
Mode : AUTO
Operation:
1. During the day there is excess solar energy
2. P_grid is negative (export to grid)
3. Controller increases dimmer → water heater heating
4. P_grid balances → 0 (zero export/import)
5. All solar energy is used locally
Scénario 2 : Protection contre l'export (ECO)
Equipment:
- 5 kW solar panels
- No grid export contract
- Sensors: Solar, Grid, Voltage
- Load: Water heater element
Mode : ECO
Operation:
1. During the day solar excess → export to grid begins
2. ECO mode detects P_grid < 0
3. Dimmer increases → water heating
4. Export prevented (P_grid ≥ 0)
5. Evening sun sets → dimmer decreases
6. Import allowed (grid purchase when needed)
Scénario 3 : Système autonome (OFFGRID)
Equipment:
- 2 kW solar panels
- 10 kWh batteries
- No grid connection
- Sensors: Solar, Load, Voltage
- Load: Tank heating element
Mode : OFFGRID
Operation:
1. System is autonomous (no grid)
2. During the day solar excess → water heating
3. At night heating element is off (no sun)
4. Batteries are used for main load
5. Maximize solar energy usage
Scénario 4 : Tarif de nuit + chauffe-eau
Equipment:
- Two-tariff meter (day/night)
- Sensors: Grid, Voltage
- Load: Water heater
Mode : MANUAL (nuit) / OFF (jour)
Operation:
1. Night (23:00-07:00): MANUAL 100% (cheap tariff)
2. Day (07:00-23:00): OFF (expensive tariff)
3. Programmable via schedule (Phase 2: SCHEDULE mode)
1.7 Architecture du système
┌─────────────────────────────────────────────────────────────┐
│ ESP32 Controller │
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌────────────────────┐ │
│ │ PowerMeter │ │ Router │ │ DimmerHAL │ │
│ │ ADC │→ │ Controller │→ │ (Zero-cross) │ │
│ └─────────────┘ └──────────────┘ └────────────────────┘ │
│ ↓ ↓ │
│ Measurements TRIAC Control │
│ (200ms cycle) (50Hz sync) │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ WiFi Manager │ │
│ │ ┌──────────────┐ ┌────────────────────────────┐ │ │
│ │ │ AP Mode │ │ WebServer (Material UI) │ │ │
│ │ │ 192.168.4.1 │ │ + REST API │ │ │
│ │ └──────────────┘ └────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ ConfigManager + HardwareConfigManager │ │
│ │ (NVS Storage) │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↑ ↓
┌────────────┐ ┌──────────────────┐
│ Sensors │ │ Dimmer Output │
├────────────┤ ├──────────────────┤
│ ZMPT107 │ │ TRIAC │
│ (Voltage) │ │ (0-100%) │
│ SCT-013 │ │ │
│ ACS-712 │ │ Load: │
│ (Current) │ │ Heater/Boiler │
│ x3 sensors │ │ (up to 2kW) │
└────────────┘ └──────────────────┘
1.8 Public cible
ACRouter est conçu pour :
- Les passionnés de DIY - construire un routeur solaire soi-même
- Les propriétaires avec panneaux solaires - optimiser l'autoconsommation
- Les développeurs - base pour des projets personnalisés (open source)
- Les projets éducatifs - apprentissage de l'IoT, de la gestion d'énergie, de l'ESP32
- Les petites entreprises - réduire les coûts d'électricité
1.9 Limitations et avertissements
⚠️ IMPORTANT :
- Sécurité électrique
- Travailler avec une tension secteur de 230V est dangereux
- Une qualification d'électricien est requise
- L'isolation galvanique des capteurs est obligatoire
-
Un dispositif différentiel (RCD) est obligatoire
-
Compatibilité de charge pour les variateurs
- Adapté uniquement aux charges résistives (éléments chauffants, radiateurs)
- NON adapté aux charges inductives (moteurs, transformateurs)
-
NON adapté à l'électronique (drivers LED, alimentations)
-
Puissance
- Le maximum est limité par le module TRIAC (habituellement 2 kW)
- Un refroidissement est nécessaire pour les charges élevées
-
Une protection contre la surchauffe est recommandée
-
Précision de mesure
- Un calibrage est nécessaire pour la précision
- Erreur de ±5–10 % avec les paramètres de base
-
La température affecte les capteurs
-
Exigences du réseau
- Fréquence réseau stable (50/60 Hz)
- Tension de qualité sans fortes fluctuations
- Le détecteur de passage par zéro est critique pour le TRIAC