From a53cb124d17d50c052baa3d1480bfd05be4eedd3 Mon Sep 17 00:00:00 2001 From: Gilles Soulier Date: Sat, 9 May 2026 19:34:50 +0200 Subject: [PATCH] README : exemple config WireGuard, section RS485, liens fabricant et projets similaires MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- README.md | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) diff --git a/README.md b/README.md index 2edb757..962743a 100644 --- a/README.md +++ b/README.md @@ -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`). +#### Exemple de fichier `.conf` (généré par wg-easy ou `wg` CLI) + +```ini +[Interface] +PrivateKey = +Address = 10.8.0.x/24 +MTU = 1420 + +[Peer] +PublicKey = +PresharedKey = +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 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 ### 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 Usage personnel — aucune licence définie.