README : exemple config WireGuard, section RS485, liens fabricant et projets similaires

- Exemple de fichier .conf WireGuard annoté + commandes génération clés
- Paragraphe complet sur la résolution des 6 problèmes RS485 (baudrate,
  buffer, lib, registres énergie, puissance 32 bits, détection jour/nuit)
- Tables de liens : KC868-A2 (fabricant, forum, ESPHome, Tasmota),
  Epever (doc officielle, registres, HA), projets GitHub similaires,
  WireGuard ESP32, bibliothèques et outils

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-09 19:34:50 +02:00
parent 17bb1d3aab
commit a53cb124d1
+137
View File
@@ -229,6 +229,36 @@ Onglet Config → section VPN WireGuard :
> **Sécurité :** les clés sont stockées dans la NVS flash de l'ESP32. Ne jamais committer le fichier `.conf` WireGuard dans git (il est dans `.gitignore`). > **Sécurité :** les clés sont stockées dans la NVS flash de l'ESP32. Ne jamais committer le fichier `.conf` WireGuard dans git (il est dans `.gitignore`).
#### Exemple de fichier `.conf` (généré par wg-easy ou `wg` CLI)
```ini
[Interface]
PrivateKey = <clé privée ESP32 — générer avec : wg genkey>
Address = 10.8.0.x/24
MTU = 1420
[Peer]
PublicKey = <clé publique du serveur WireGuard>
PresharedKey = <optionnel — générer avec : wg genpsk>
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Endpoint = mon.domaine.org:51820
```
**Générer une paire de clés :**
```bash
# Clé privée
wg genkey | tee privatekey
# Clé publique correspondante
cat privatekey | wg pubkey
# Clé pré-partagée (optionnel)
wg genpsk
```
> **Note :** la bibliothèque `WireGuard-ESP32-Arduino` n'expose pas encore la `PresharedKey` dans son API Arduino. Le tunnel fonctionne sans PSK — configurer le peer serveur en conséquence ou attendre un patch de la lib.
### Deep sleep ### Deep sleep
Onglet Config → Mode économie d'énergie : activer, régler l'intervalle de réveil et le seuil PV. Onglet Config → Mode économie d'énergie : activer, régler l'intervalle de réveil et le seuil PV.
@@ -256,6 +286,57 @@ Onglet Config → Mode économie d'énergie : activer, régler l'intervalle de r
--- ---
## Résolution des problèmes RS485
La communication avec l'Epever a nécessité plusieurs corrections non documentées dans les projets existants. Ce résumé évite de retomber dans les mêmes pièges.
### Problème 1 — Baudrate incorrect (bloquant)
L'Epever Tracer 4210N communique à **115 200 bps** et non à 9 600 bps comme indiqué par défaut dans la plupart des bibliothèques et exemples en ligne. Aucune réponse RS485 n'est obtenue tant que le baudrate est incorrect.
**Correction :** `#define MODBUS_BAUDRATE 115200` et une sonde de démarrage (`probeRegistreBatterie()`) qui tente 9 600 puis 115 200 et confirme la réponse par CRC.
### Problème 2 — Bibliothèque ModbusRTU inadaptée
La bibliothèque `modbus-esp8266` avec ses callbacks asynchrones gérait mal le timing half-duplex à 115 200 bds : trames corrompues, échos non consommés, timeouts aléatoires.
**Correction :** abandon du mode callback, passage en **Serial2 direct** avec CRC Modbus calculé manuellement. La bibliothèque reste uniquement pour initialiser l'UART (`mb.begin()` / `mb.master()`).
### Problème 3 — Buffer RX pollué entre requêtes
Sans purge, les octets résiduels d'une réponse précédente (ou du bruit de ligne) polluaient la trame suivante et généraient des CRC invalides en cascade.
**Correction :** appel systématique de `viderRx()` avant chaque envoi — lit et journalise tous les octets présents dans le FIFO Serial2.
### Problème 4 — Registres énergie mal adressés
La plupart des projets open source lisent l'énergie à partir de `0x3300`. Le protocole Modbus v2.5 d'Epever indique que les compteurs kWh démarrent à **`0x3302`** (génération du jour) — décalage de 2 registres sur tous les offsets.
### Problème 5 — Puissance charge sur 32 bits
Le registre `0x310E` (puissance sortie load) est sur **32 bits** (word L + word H en `0x310F`). Une lecture 16 bits donnait des valeurs erronées dès que la puissance dépassait 655 W.
### Problème 6 — Détection jour/nuit incohérente
Le registre FC02 `0x200C` retourne parfois `Nuit` alors que le panneau produit clairement (transition rapide matin/soir).
**Correction :** logique hybride — `sun = !nuit_registre || pv > 2.0 V`. Si le panneau produit plus de 2 V, on considère qu'il fait jour quel que soit le registre.
### Tableau récapitulatif
| Problème | Cause racine | Correction appliquée |
|----------|-------------|---------------------|
| Aucune réponse | Baudrate 9 600 au lieu de 115 200 | `MODBUS_BAUDRATE 115200` + sonde boot |
| Trames corrompues | Buffer RX non purgé | `viderRx()` avant chaque trame |
| Timeouts aléatoires | Lib asynchrone inadaptée | Serial2 direct + CRC manuel |
| Énergie kWh = 0 | Base registre `0x3300` au lieu de `0x3302` | Correction offsets (doc v2.5) |
| Puissance load erronée | Lecture 16 bits au lieu de 32 bits | `(reg[3] << 16 \| reg[2]) × 0.01` |
| Soleil incohérent | FC02 seul, pas de fallback | Hybride : registre + tension PV |
> Le détail complet avec les extraits de code est dans [`debug_rs485.md`](debug_rs485.md).
---
## TODO ## TODO
### Fonctionnalités ### Fonctionnalités
@@ -277,6 +358,62 @@ Onglet Config → Mode économie d'énergie : activer, régler l'intervalle de r
--- ---
---
## Ressources et liens utiles
### Matériel — KC868-A2
| Ressource | Lien |
|-----------|------|
| Page produit officielle | [kincony.com — KC868-A2](https://www.kincony.com/esp32-4g-relay.html) |
| Forum KinCony | [forum.kincony.com](https://www.kincony.com/forum/) |
| GitHub KinCony (officiel) | [github.com/hzkincony](https://github.com/hzkincony) |
| Profil ESPHome | [devices.esphome.io — KC868-A2](https://devices.esphome.io/devices/kincony-kc868-a2/) |
| Template Tasmota | [templates.blakadder.com — KC868-A2](https://templates.blakadder.com/kincony_KC868-A2.html) |
| Scripts démo Arduino | [github.com/playfultechnology/kincony](https://github.com/playfultechnology/kincony) |
### Matériel — Epever Tracer
| Ressource | Lien |
|-----------|------|
| Documentation Modbus v2.5 | [MODBUS-Protocol-v25.pdf](MODBUS-Protocol-v25.pdf) *(inclus dans ce repo)* |
| Documentation Tracer-AN Series | [epever.com — Tracer-AN v1.0](https://www.epever.com/upload/cert/file/1811/Tracer-AN-SMS-EL-V1.0.pdf) |
| Registres Modbus — discussion avancée | [diysolarforum.com — Epever registers](https://diysolarforum.com/threads/epever-tracer-modbus-registers-digging-deeper.108305/) |
| Carte complète des registres (Python) | [github.com/kasbert/epsolar-tracer](https://github.com/kasbert/epsolar-tracer/blob/master/pyepsolartracer/registers.py) |
| Intégration Home Assistant | [community.home-assistant.io — Epever Modbus](https://community.home-assistant.io/t/epever-modbus-rs-485-config/214397) |
| Topics GitHub `epever` | [github.com/topics/epever](https://github.com/topics/epever) |
### Projets similaires (ESP32 + Epever + Modbus)
| Projet | Description |
|--------|-------------|
| [Solar-Tracer-Blynk-V3](https://github.com/Bettapro/Solar-Tracer-Blynk-V3) | ESP32 + Epever RS485 → Blynk / Home Assistant / MQTT |
| [Tracer-RS485-Modbus-Blynk-V2](https://github.com/tekk/Tracer-RS485-Modbus-Blynk-V2) | ESP8266 + Epever RS485 → Blynk (version remaniée) |
| [Tracer-RS485-Modbus-CustomAPI](https://github.com/DeltaLima/Tracer-RS485-Modbus-CustomAPI) | ESP8266 + Epever RS485 → API personnalisée |
| [EPSolar_Tracer](https://github.com/alexnathanson/EPSolar_Tracer) | Plusieurs implémentations de communication avec les Tracer |
### WireGuard sur ESP32
| Ressource | Lien |
|-----------|------|
| Bibliothèque utilisée | [github.com/ciniml/WireGuard-ESP32-Arduino](https://github.com/ciniml/WireGuard-ESP32-Arduino) |
| Référence Arduino | [arduino.cc — WireGuard-ESP32](https://www.arduino.cc/reference/en/libraries/wireguard-esp32/) |
| Guide démarrage (DeepWiki) | [deepwiki.com — Getting Started](https://deepwiki.com/ciniml/WireGuard-ESP32-Arduino/2-getting-started) |
| Exemple avec interface web | [github.com/andr13/ESP32-Web-WireGuard](https://github.com/andr13/ESP32-Web-WireGuard) |
### Bibliothèques et outils
| Ressource | Lien |
|-----------|------|
| PlatformIO | [platformio.org](https://platformio.org/) |
| ESPAsyncWebServer | [github.com/me-no-dev/ESPAsyncWebServer](https://github.com/me-no-dev/ESPAsyncWebServer) |
| ElegantOTA | [github.com/ayushsharma82/ElegantOTA](https://github.com/ayushsharma82/ElegantOTA) |
| ArduinoJson | [arduinojson.org](https://arduinojson.org/) |
| modbus-esp8266 | [github.com/emelianov/modbus-esp8266](https://github.com/emelianov/modbus-esp8266) |
---
## Licence ## Licence
Usage personnel — aucune licence définie. Usage personnel — aucune licence définie.