# 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.

