a8f0d6ccba
Fonctionnalités : - Lecture RS485 Modbus Epever Tracer 4210N (115200 bps, FC03/FC04/FC16) - Moteur de règles JSON (LittleFS) — commande automatique des relais - Interface web mobile-first (dashboard, règles, config, historique, EPEVER, debug) - WiFi AP+STA simultanés avec reconnexion automatique et portail captif - mDNS configurable (pv.local par défaut) - Configuration registres EPEVER depuis l'UI (18 registres holding) - Historique basse/haute résolution avec graphes canvas - VPN WireGuard optionnel (désactivé par défaut, config via UI) - OTA firmware + filesystem via ElegantOTA - Deep sleep / économie d'énergie Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
353 lines
6.1 KiB
Markdown
353 lines
6.1 KiB
Markdown
# amelioration.md
|
|
|
|
# Ajout de la gestion complète de configuration EPEVER dans l'application
|
|
|
|
## Objectif
|
|
|
|
Ajouter dans l'application une nouvelle section de configuration avancée dédiée au régulateur solaire EPEVER AN4210N.
|
|
|
|
Cette fonctionnalité doit permettre :
|
|
|
|
- de lire automatiquement tous les paramètres importants du régulateur via Modbus RS485 ;
|
|
- d'afficher ces paramètres dans l'interface web ;
|
|
- de modifier certains paramètres depuis l'interface ;
|
|
- d'écrire les nouveaux paramètres dans le régulateur EPEVER ;
|
|
- de sauvegarder localement la configuration ;
|
|
- d'éviter toute écriture dangereuse ou involontaire ;
|
|
- de conserver une architecture stable et propre sans casser le fonctionnement actuel.
|
|
|
|
Cette fonctionnalité doit être conçue pour être robuste, maintenable et extensible.
|
|
|
|
---
|
|
|
|
# Contexte matériel
|
|
|
|
Le projet utilise :
|
|
|
|
- carte KC868-A2 (ESP32)
|
|
- régulateur EPEVER AN4210N
|
|
- communication RS485 Modbus RTU
|
|
- interface web embarquée sur ESP32
|
|
- système déjà existant de lecture Modbus
|
|
|
|
Le projet possède déjà :
|
|
|
|
- une interface web
|
|
- OTA
|
|
- gestion des relais
|
|
- lecture des données EPEVER
|
|
- règles automatiques
|
|
- mode économie d'énergie
|
|
|
|
L'amélioration demandée doit s'intégrer dans cette architecture existante.
|
|
|
|
---
|
|
|
|
# Nouvelle fonctionnalité à ajouter
|
|
|
|
## Nouvel onglet web :
|
|
|
|
Créer un nouvel onglet :
|
|
|
|
- "Configuration EPEVER"
|
|
|
|
ou
|
|
|
|
- "Paramètres batterie"
|
|
|
|
Cet onglet doit permettre :
|
|
|
|
- lecture des paramètres actuels ;
|
|
- affichage des valeurs ;
|
|
- modification ;
|
|
- écriture vers EPEVER ;
|
|
- sauvegarde/restauration ;
|
|
- export/import JSON.
|
|
|
|
---
|
|
|
|
# Fonctionnement attendu
|
|
|
|
## Lecture automatique des paramètres
|
|
|
|
Au chargement de la page :
|
|
|
|
- lire automatiquement les registres Modbus de configuration EPEVER ;
|
|
- afficher les valeurs dans les champs web ;
|
|
- indiquer les erreurs de lecture ;
|
|
- ne jamais bloquer l'interface web si une lecture échoue.
|
|
|
|
La lecture doit être asynchrone et non bloquante.
|
|
|
|
---
|
|
|
|
# Paramètres à récupérer
|
|
|
|
Commencer par gérer au minimum :
|
|
|
|
## Paramètres batterie
|
|
|
|
- type batterie
|
|
- capacité batterie (Ah)
|
|
- tension nominale
|
|
|
|
## Paramètres charge
|
|
|
|
- Boost Voltage
|
|
- Float Voltage
|
|
- Equalize Voltage
|
|
- Boost Reconnect Voltage
|
|
- Low Voltage Disconnect
|
|
- Low Voltage Reconnect
|
|
- Under Voltage Warning
|
|
- Over Voltage Disconnect
|
|
- Charging Limit Voltage
|
|
|
|
## Paramètres timing
|
|
|
|
- durée boost
|
|
- durée equalize
|
|
|
|
## Température
|
|
|
|
- compensation température
|
|
|
|
## Divers
|
|
|
|
- activation equalization
|
|
- protections
|
|
|
|
Le code doit être pensé pour pouvoir ajouter facilement d'autres registres plus tard.
|
|
|
|
---
|
|
|
|
# Interface web
|
|
|
|
## Contraintes UI
|
|
|
|
L'interface doit rester légère.
|
|
|
|
Utiliser :
|
|
|
|
- formulaire simple ;
|
|
- sections claires ;
|
|
- groupes logiques ;
|
|
- unités visibles (V, Ah, min, etc.) ;
|
|
- valeurs actuelles visibles ;
|
|
- boutons :
|
|
- Lire
|
|
- Écrire
|
|
- Restaurer
|
|
- Exporter
|
|
- Importer
|
|
|
|
---
|
|
|
|
# Sécurité importante
|
|
|
|
## Très important
|
|
|
|
Aucune écriture ne doit être envoyée automatiquement.
|
|
|
|
L'utilisateur doit :
|
|
|
|
1. modifier les valeurs ;
|
|
2. cliquer explicitement sur "Écrire".
|
|
|
|
Ajouter une confirmation avant écriture.
|
|
|
|
Exemple :
|
|
|
|
"Confirmer l'écriture des paramètres vers le régulateur EPEVER ?"
|
|
|
|
---
|
|
|
|
# Validation des valeurs
|
|
|
|
Ajouter une validation stricte côté ESP32.
|
|
|
|
Exemples :
|
|
|
|
- Float Voltage :
|
|
- min 13.0V
|
|
- max 14.5V
|
|
|
|
- Boost Voltage :
|
|
- min 13.5V
|
|
- max 15V
|
|
|
|
- capacité batterie :
|
|
- valeur positive uniquement
|
|
|
|
Empêcher toute valeur incohérente.
|
|
|
|
---
|
|
|
|
# Gestion des erreurs
|
|
|
|
Le système doit être robuste.
|
|
|
|
## Cas à gérer
|
|
|
|
- câble RS485 débranché ;
|
|
- timeout Modbus ;
|
|
- CRC invalide ;
|
|
- registre inaccessible ;
|
|
- écriture refusée ;
|
|
- données invalides.
|
|
|
|
L'interface doit afficher :
|
|
|
|
- erreur claire ;
|
|
- statut de communication ;
|
|
- dernière synchronisation ;
|
|
- dernière erreur.
|
|
|
|
---
|
|
|
|
# Sauvegarde locale
|
|
|
|
Ajouter une sauvegarde locale de configuration.
|
|
|
|
## Objectif
|
|
|
|
Pouvoir :
|
|
|
|
- restaurer rapidement les paramètres ;
|
|
- sauvegarder avant modification ;
|
|
- exporter/importer.
|
|
|
|
Format conseillé :
|
|
|
|
- JSON.
|
|
|
|
Exemple :
|
|
|
|
```json
|
|
{
|
|
"boost_voltage": 14.2,
|
|
"float_voltage": 13.6,
|
|
"battery_capacity": 100
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
# Architecture logicielle
|
|
|
|
## Important
|
|
|
|
Ne pas mélanger :
|
|
|
|
- lecture temps réel ;
|
|
- logique métier ;
|
|
- écriture configuration ;
|
|
- interface web.
|
|
|
|
Créer une couche dédiée.
|
|
|
|
Exemple :
|
|
|
|
- epever_runtime.cpp
|
|
- epever_config.cpp
|
|
- epever_registers.h
|
|
- epever_web.cpp
|
|
|
|
---
|
|
|
|
# Gestion des registres
|
|
|
|
Créer une abstraction claire.
|
|
|
|
Exemple :
|
|
|
|
```cpp
|
|
struct EpeverRegisterConfig {
|
|
uint16_t register_id;
|
|
const char* name;
|
|
float scale;
|
|
float min_value;
|
|
float max_value;
|
|
bool writable;
|
|
};
|
|
```
|
|
|
|
Objectif :
|
|
|
|
- simplifier maintenance ;
|
|
- éviter duplication ;
|
|
- permettre génération automatique UI plus tard.
|
|
|
|
---
|
|
|
|
# Compatibilité future
|
|
|
|
Prévoir :
|
|
|
|
- autres modèles EPEVER ;
|
|
- plusieurs batteries ;
|
|
- profils batterie ;
|
|
- presets ;
|
|
- mode expert.
|
|
|
|
---
|
|
|
|
# Fonctionnalités futures possibles
|
|
|
|
Le code doit être pensé pour permettre plus tard :
|
|
|
|
- profils GEL/AGM/Lithium ;
|
|
- détection automatique type batterie ;
|
|
- historique des changements ;
|
|
- rollback ;
|
|
- sauvegarde cloud/Home Assistant ;
|
|
- synchronisation MQTT ;
|
|
- règles automatiques basées sur configuration ;
|
|
- assistant de configuration.
|
|
- sur la page web des explication pour les parametre permettrons un comprehension pour un novice
|
|
---
|
|
|
|
# Contraintes importantes
|
|
|
|
## Le projet ne doit pas être cassé
|
|
|
|
Avant toute modification :
|
|
|
|
- analyser l'architecture existante ;
|
|
- comprendre les flux actuels ;
|
|
- éviter les régressions.
|
|
|
|
Ne pas réécrire brutalement le système existant.
|
|
|
|
L'amélioration doit être progressive et propre.
|
|
|
|
---
|
|
|
|
# Priorité de développement
|
|
|
|
Ordre conseillé :
|
|
|
|
1. abstraction registres ;
|
|
2. lecture paramètres ;
|
|
3. affichage web ;
|
|
4. validation ;
|
|
5. écriture ;
|
|
6. sauvegarde JSON ;
|
|
7. import/export ;
|
|
8. gestion erreurs avancée.
|
|
|
|
---
|
|
|
|
# Important
|
|
|
|
Avant de coder :
|
|
|
|
- analyser le code actuel ;
|
|
- identifier les modules déjà existants ;
|
|
- proposer un plan d'intégration ;
|
|
- identifier les risques techniques ;
|
|
- proposer une architecture propre.
|
|
|
|
Le but est d'améliorer l'application existante, pas de repartir de zéro.
|
|
|