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:
@@ -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 = <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
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user